約 6,403,454 件
https://w.atwiki.jp/feedback1970/pages/57.html
memo source 1 /* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http //www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef APACHE_HTTP_CONFIG_H 18 #define APACHE_HTTP_CONFIG_H 19 20 #include "apr_hooks.h" 21 #include "util_cfgtree.h" 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /** 28 * @file http_config.h 29 * @brief Apache Configuration 30 */ 31 32 /* 33 * The central data structures around here... 34 */ 35 36 /* Command dispatch structures... */ 37 38 /** 39 * How the directives arguments should be parsed. 40 * @remark Note that for all of these except RAW_ARGS, the config routine is 41 * passed a freshly allocated string which can be modified or stored 42 * or whatever... 43 */ 44 enum cmd_how { 45 RAW_ARGS, /** cmd_func parses command line itself */ 46 TAKE1, /** one argument only */ 47 TAKE2, /** two arguments only */ 48 ITERATE, /** one argument, occuring multiple times 49 * (e.g., IndexIgnore) 50 */ 51 ITERATE2, /** two arguments, 2nd occurs multiple times 52 * (e.g., AddIcon) 53 */ 54 FLAG, /** One of On or Off */ 55 NO_ARGS, /** No args at all, e.g. /Directory */ 56 TAKE12, /** one or two arguments */ 57 TAKE3, /** three arguments only */ 58 TAKE23, /** two or three arguments */ 59 TAKE123, /** one, two or three arguments */ 60 TAKE13 /** one or three arguments */ 61 }; 62 /** 63 * This structure is passed to a command which is being invoked, 64 * to carry a large variety of miscellaneous data which is all of 65 * use to *somebody*... 66 */ 67 typedef struct cmd_parms_struct cmd_parms; 68 69 #if defined(AP_HAVE_DESIGNATED_INITIALIZER) || defined(DOXYGEN) 70 71 /** 72 * All the types of functions that can be used in directives 73 * @internal 74 */ 75 typedef union { 76 /** function to call for a no-args */ 77 const char *(*no_args) (cmd_parms *parms, void *mconfig); 78 /** function to call for a raw-args */ 79 const char *(*raw_args) (cmd_parms *parms, void *mconfig, 80 const char *args); 81 /** function to call for a take1 */ 82 const char *(*take1) (cmd_parms *parms, void *mconfig, const char *w); 83 /** function to call for a take2 */ 84 const char *(*take2) (cmd_parms *parms, void *mconfig, const char *w, 85 const char *w2); 86 /** function to call for a take3 */ 87 const char *(*take3) (cmd_parms *parms, void *mconfig, const char *w, 88 const char *w2, const char *w3); 89 /** function to call for a flag */ 90 const char *(*flag) (cmd_parms *parms, void *mconfig, int on); 91 } cmd_func; 92 93 /** This configuration directive does not take any arguments */ 94 # define AP_NO_ARGS func.no_args 95 /** This configuration directive will handle it s own parsing of arguments*/ 96 # define AP_RAW_ARGS func.raw_args 97 /** This configuration directive takes 1 argument*/ 98 # define AP_TAKE1 func.take1 99 /** This configuration directive takes 2 arguments */ 100 # define AP_TAKE2 func.take2 101 /** This configuration directive takes 3 arguments */ 102 # define AP_TAKE3 func.take3 103 /** This configuration directive takes a flag (on/off) as a argument*/ 104 # define AP_FLAG func.flag 105 106 /** method of declaring a directive with no arguments */ 107 # define AP_INIT_NO_ARGS(directive, func, mconfig, where, help) \ 108 { directive, { .no_args=func }, mconfig, where, RAW_ARGS, help } 109 /** method of declaring a directive with raw argument parsing */ 110 # define AP_INIT_RAW_ARGS(directive, func, mconfig, where, help) \ 111 { directive, { .raw_args=func }, mconfig, where, RAW_ARGS, help } 112 /** method of declaring a directive which takes 1 argument */ 113 # define AP_INIT_TAKE1(directive, func, mconfig, where, help) \ 114 { directive, { .take1=func }, mconfig, where, TAKE1, help } 115 /** method of declaring a directive which takes multiple arguments */ 116 # define AP_INIT_ITERATE(directive, func, mconfig, where, help) \ 117 { directive, { .take1=func }, mconfig, where, ITERATE, help } 118 /** method of declaring a directive which takes 2 arguments */ 119 # define AP_INIT_TAKE2(directive, func, mconfig, where, help) \ 120 { directive, { .take2=func }, mconfig, where, TAKE2, help } 121 /** method of declaring a directive which takes 1 or 2 arguments */ 122 # define AP_INIT_TAKE12(directive, func, mconfig, where, help) \ 123 { directive, { .take2=func }, mconfig, where, TAKE12, help } 124 /** method of declaring a directive which takes multiple 2 arguments */ 125 # define AP_INIT_ITERATE2(directive, func, mconfig, where, help) \ 126 { directive, { .take2=func }, mconfig, where, ITERATE2, help } 127 /** method of declaring a directive which takes 1 or 3 arguments */ 128 # define AP_INIT_TAKE13(directive, func, mconfig, where, help) \ 129 { directive, { .take3=func }, mconfig, where, TAKE13, help } 130 /** method of declaring a directive which takes 2 or 3 arguments */ 131 # define AP_INIT_TAKE23(directive, func, mconfig, where, help) \ 132 { directive, { .take3=func }, mconfig, where, TAKE23, help } 133 /** method of declaring a directive which takes 1 to 3 arguments */ 134 # define AP_INIT_TAKE123(directive, func, mconfig, where, help) \ 135 { directive, { .take3=func }, mconfig, where, TAKE123, help } 136 /** method of declaring a directive which takes 3 arguments */ 137 # define AP_INIT_TAKE3(directive, func, mconfig, where, help) \ 138 { directive, { .take3=func }, mconfig, where, TAKE3, help } 139 /** method of declaring a directive which takes a flag (on/off) as a argument*/ 140 # define AP_INIT_FLAG(directive, func, mconfig, where, help) \ 141 { directive, { .flag=func }, mconfig, where, FLAG, help } 142 143 #else /* AP_HAVE_DESIGNATED_INITIALIZER */ 144 145 typedef const char *(*cmd_func) (); 146 147 # define AP_NO_ARGS func 148 # define AP_RAW_ARGS func 149 # define AP_TAKE1 func 150 # define AP_TAKE2 func 151 # define AP_TAKE3 func 152 # define AP_FLAG func 153 154 # define AP_INIT_NO_ARGS(directive, func, mconfig, where, help) \ 155 { directive, func, mconfig, where, RAW_ARGS, help } 156 # define AP_INIT_RAW_ARGS(directive, func, mconfig, where, help) \ 157 { directive, func, mconfig, where, RAW_ARGS, help } 158 # define AP_INIT_TAKE1(directive, func, mconfig, where, help) \ 159 { directive, func, mconfig, where, TAKE1, help } 160 # define AP_INIT_ITERATE(directive, func, mconfig, where, help) \ 161 { directive, func, mconfig, where, ITERATE, help } 162 # define AP_INIT_TAKE2(directive, func, mconfig, where, help) \ 163 { directive, func, mconfig, where, TAKE2, help } 164 # define AP_INIT_TAKE12(directive, func, mconfig, where, help) \ 165 { directive, func, mconfig, where, TAKE12, help } 166 # define AP_INIT_ITERATE2(directive, func, mconfig, where, help) \ 167 { directive, func, mconfig, where, ITERATE2, help } 168 # define AP_INIT_TAKE13(directive, func, mconfig, where, help) \ 169 { directive, func, mconfig, where, TAKE13, help } 170 # define AP_INIT_TAKE23(directive, func, mconfig, where, help) \ 171 { directive, func, mconfig, where, TAKE23, help } 172 # define AP_INIT_TAKE123(directive, func, mconfig, where, help) \ 173 { directive, func, mconfig, where, TAKE123, help } 174 # define AP_INIT_TAKE3(directive, func, mconfig, where, help) \ 175 { directive, func, mconfig, where, TAKE3, help } 176 # define AP_INIT_FLAG(directive, func, mconfig, where, help) \ 177 { directive, func, mconfig, where, FLAG, help } 178 179 #endif /* AP_HAVE_DESIGNATED_INITIALIZER */ 180 181 /** 182 * The command record structure. Each modules can define a table of these 183 * to define the directives it will implement. 184 */ 185 typedef struct command_struct command_rec; 186 struct command_struct { 187 /** Name of this command */ 188 const char *name; 189 /** The function to be called when this directive is parsed */ 190 cmd_func func; 191 /** Extra data, for functions which implement multiple commands... */ 192 void *cmd_data; 193 /** What overrides need to be allowed to enable this command. */ 194 int req_override; 195 /** What the command expects as arguments 196 * @defvar cmd_how args_how*/ 197 enum cmd_how args_how; 198 199 /** usage message, in case of syntax errors */ 200 const char *errmsg; 201 }; 202 203 /** 204 * @defgroup ConfigDirectives Allowed locations for configuration directives. 205 * 206 * The allowed locations for a configuration directive are the union of 207 * those indicated by each set bit in the req_override mask. 208 * 209 * @{ 210 */ 211 #define OR_NONE 0 /** *.conf is not available anywhere in this override */ 212 #define OR_LIMIT 1 /** *.conf inside Directory or Location 213 and .htaccess when AllowOverride Limit */ 214 #define OR_OPTIONS 2 /** *.conf anywhere 215 and .htaccess when AllowOverride Options */ 216 #define OR_FILEINFO 4 /** *.conf anywhere 217 and .htaccess when AllowOverride FileInfo */ 218 #define OR_AUTHCFG 8 /** *.conf inside Directory or Location 219 and .htaccess when AllowOverride AuthConfig */ 220 #define OR_INDEXES 16 /** *.conf anywhere 221 and .htaccess when AllowOverride Indexes */ 222 #define OR_UNSET 32 /** unset a directive (in Allow) */ 223 #define ACCESS_CONF 64 /** *.conf inside Directory or Location */ 224 #define RSRC_CONF 128 /** *.conf outside Directory or Location */ 225 #define EXEC_ON_READ 256 /** force directive to execute a command 226 which would modify the configuration (like including another 227 file, or IFModule */ 228 /** this directive can be placed anywhere */ 229 #define OR_ALL (OR_LIMIT|OR_OPTIONS|OR_FILEINFO|OR_AUTHCFG|OR_INDEXES) 230 231 /** @} */ 232 233 /** 234 * This can be returned by a function if they don t wish to handle 235 * a command. Make it something not likely someone will actually use 236 * as an error code. 237 */ 238 #define DECLINE_CMD "\a\b" 239 240 /** Common structure for reading of config files / passwd files etc. */ 241 typedef struct ap_configfile_t ap_configfile_t; 242 struct ap_configfile_t { 243 int (*getch) (void *param); /** a getc()-like function */ 244 void *(*getstr) (void *buf, size_t bufsiz, void *param); 245 /** a fgets()-like function */ 246 int (*close) (void *param); /** a close handler function */ 247 void *param; /** the argument passed to getch/getstr/close */ 248 const char *name; /** the filename / description */ 249 unsigned line_number; /** current line number, starting at 1 */ 250 }; 251 252 /** 253 * This structure is passed to a command which is being invoked, 254 * to carry a large variety of miscellaneous data which is all of 255 * use to *somebody*... 256 */ 257 struct cmd_parms_struct { 258 /** Argument to command from cmd_table */ 259 void *info; 260 /** Which allow-override bits are set */ 261 int override; 262 /** Which methods are Limit ed */ 263 apr_int64_t limited; 264 /** methods which are limited */ 265 apr_array_header_t *limited_xmethods; 266 /** methods which are xlimited */ 267 ap_method_list_t *xlimited; 268 269 /** Config file structure. */ 270 ap_configfile_t *config_file; 271 /** the directive specifying this command */ 272 ap_directive_t *directive; 273 274 /** Pool to allocate new storage in */ 275 apr_pool_t *pool; 276 /** Pool for scratch memory; persists during configuration, but 277 * wiped before the first request is served... */ 278 apr_pool_t *temp_pool; 279 /** Server_rec being configured for */ 280 server_rec *server; 281 /** If configuring for a directory, pathname of that directory. 282 * NOPE! That s what it meant previous to the existance of Files , 283 * Location and regex matching. Now the only usefulness that can be 284 * derived from this field is whether a command is being called in a 285 * server context (path == NULL) or being called in a dir context 286 * (path != NULL). */ 287 char *path; 288 /** configuration command */ 289 const command_rec *cmd; 290 291 /** per_dir_config vector passed to handle_command */ 292 struct ap_conf_vector_t *context; 293 /** directive with syntax error */ 294 const ap_directive_t *err_directive; 295 }; 296 297 /** 298 * Module structures. Just about everything is dispatched through 299 * these, directly or indirectly (through the command and handler 300 * tables). 301 */ 302 typedef struct module_struct module; 303 struct module_struct { 304 /** API version, *not* module version; check that module is 305 * compatible with this version of the server. 306 */ 307 int version; 308 /** API minor version. Provides API feature milestones. Not checked 309 * during module init */ 310 int minor_version; 311 /** Index to this modules structures in config vectors. */ 312 int module_index; 313 314 /** The name of the module s C file */ 315 const char *name; 316 /** The handle for the DSO. Internal use only */ 317 void *dynamic_load_handle; 318 319 /** A pointer to the next module in the list 320 * @defvar module_struct *next */ 321 struct module_struct *next; 322 323 /** Magic Cookie to identify a module structure; It s mainly 324 * important for the DSO facility (see also mod_so). */ 325 unsigned long magic; 326 327 /** Function to allow MPMs to re-write command line arguments. This 328 * hook is only available to MPMs. 329 * @param The process that the server is running in. 330 */ 331 void (*rewrite_args) (process_rec *process); 332 /** Function to allow all modules to create per directory configuration 333 * structures. 334 * @param p The pool to use for all allocations. 335 * @param dir The directory currently being processed. 336 * @return The per-directory structure created 337 */ 338 void *(*create_dir_config) (apr_pool_t *p, char *dir); 339 /** Function to allow all modules to merge the per directory configuration 340 * structures for two directories. 341 * @param p The pool to use for all allocations. 342 * @param base_conf The directory structure created for the parent directory. 343 * @param new_conf The directory structure currently being processed. 344 * @return The new per-directory structure created 345 */ 346 void *(*merge_dir_config) (apr_pool_t *p, void *base_conf, void *new_conf); 347 /** Function to allow all modules to create per server configuration 348 * structures. 349 * @param p The pool to use for all allocations. 350 * @param s The server currently being processed. 351 * @return The per-server structure created 352 */ 353 void *(*create_server_config) (apr_pool_t *p, server_rec *s); 354 /** Function to allow all modules to merge the per server configuration 355 * structures for two servers. 356 * @param p The pool to use for all allocations. 357 * @param base_conf The directory structure created for the parent directory. 358 * @param new_conf The directory structure currently being processed. 359 * @return The new per-directory structure created 360 */ 361 void *(*merge_server_config) (apr_pool_t *p, void *base_conf, 362 void *new_conf); 363 364 /** A command_rec table that describes all of the directives this module 365 * defines. */ 366 const command_rec *cmds; 367 368 /** A hook to allow modules to hook other points in the request processing. 369 * In this function, modules should call the ap_hook_*() functions to 370 * register an interest in a specific step in processing the current 371 * request. 372 * @param p the pool to use for all allocations 373 */ 374 void (*register_hooks) (apr_pool_t *p); 375 }; 376 377 /** 378 * @defgroup ModuleInit Module structure initializers 379 * 380 * Initializer for the first few module slots, which are only 381 * really set up once we start running. Note that the first two slots 382 * provide a version check; this should allow us to deal with changes to 383 * the API. The major number should reflect changes to the API handler table 384 * itself or removal of functionality. The minor number should reflect 385 * additions of functionality to the existing API. (the server can detect 386 * an old-format module, and either handle it back-compatibly, or at least 387 * signal an error). See src/include/ap_mmn.h for MMN version history. 388 * @{ 389 */ 390 391 /** The one used in Apache 1.3, which will deliberately cause an error */ 392 #define STANDARD_MODULE_STUFF this_module_needs_to_be_ported_to_apache_2_0 393 394 /** Use this in all standard modules */ 395 #define STANDARD20_MODULE_STUFF MODULE_MAGIC_NUMBER_MAJOR, \ 396 MODULE_MAGIC_NUMBER_MINOR, \ 397 -1, \ 398 __FILE__, \ 399 NULL, \ 400 NULL, \ 401 MODULE_MAGIC_COOKIE, \ 402 NULL /* rewrite args spot */ 403 404 /** Use this only in MPMs */ 405 #define MPM20_MODULE_STUFF MODULE_MAGIC_NUMBER_MAJOR, \ 406 MODULE_MAGIC_NUMBER_MINOR, \ 407 -1, \ 408 __FILE__, \ 409 NULL, \ 410 NULL, \ 411 MODULE_MAGIC_COOKIE 412 413 /** @} */ 414 415 /* CONFIGURATION VECTOR FUNCTIONS */ 416 417 /** configuration vector structure */ 418 typedef struct ap_conf_vector_t ap_conf_vector_t; 419 420 /** 421 * Generic accessors for other modules to get at their own module-specific 422 * data 423 * @param conf_vector The vector in which the modules configuration is stored. 424 * usually r- per_dir_config or s- module_config 425 * @param m The module to get the data for. 426 * @return The module-specific data 427 */ 428 AP_DECLARE(void *) ap_get_module_config(const ap_conf_vector_t *cv, 429 const module *m); 430 431 /** 432 * Generic accessors for other modules to set at their own module-specific 433 * data 434 * @param conf_vector The vector in which the modules configuration is stored. 435 * usually r- per_dir_config or s- module_config 436 * @param m The module to set the data for. 437 * @param val The module-specific data to set 438 */ 439 AP_DECLARE(void) ap_set_module_config(ap_conf_vector_t *cv, const module *m, 440 void *val); 441 442 #if !defined(AP_DEBUG) 443 444 #define ap_get_module_config(v,m) \ 445 (((void **)(v))[(m)- module_index]) 446 #define ap_set_module_config(v,m,val) \ 447 ((((void **)(v))[(m)- module_index]) = (val)) 448 449 #endif /* AP_DEBUG */ 450 451 452 /** 453 * Generic command handling function for strings 454 * @param cmd The command parameters for this directive 455 * @param struct_ptr pointer into a given type 456 * @param arg The argument to the directive 457 * @return An error string or NULL on success 458 */ 459 AP_DECLARE_NONSTD(const char *) ap_set_string_slot(cmd_parms *cmd, 460 void *struct_ptr, 461 const char *arg); 462 463 /** 464 * Generic command handling function for integers 465 * @param cmd The command parameters for this directive 466 * @param struct_ptr pointer into a given type 467 * @param arg The argument to the directive 468 * @return An error string or NULL on success 469 */ 470 AP_DECLARE_NONSTD(const char *) ap_set_int_slot(cmd_parms *cmd, 471 void *struct_ptr, 472 const char *arg); 473 474 /** 475 * Return true if the specified method is limited by being listed in 476 * a Limit container, or by *not* being listed in a LimiteExcept 477 * container. 478 * 479 * @param method Pointer to a string specifying the method to check. 480 * @param cmd Pointer to the cmd_parms structure passed to the 481 * directive handler. 482 * @return 0 if the method is not limited in the current scope 483 */ 484 AP_DECLARE(int) ap_method_is_limited(cmd_parms *cmd, const char *method); 485 486 /** 487 * Generic command handling function for strings, always sets the value 488 * to a lowercase string 489 * @param cmd The command parameters for this directive 490 * @param struct_ptr pointer into a given type 491 * @param arg The argument to the directive 492 * @return An error string or NULL on success 493 */ 494 AP_DECLARE_NONSTD(const char *) ap_set_string_slot_lower(cmd_parms *cmd, 495 void *struct_ptr, 496 const char *arg); 497 /** 498 * Generic command handling function for flags 499 * @param cmd The command parameters for this directive 500 * @param struct_ptr pointer into a given type 501 * @param arg The argument to the directive (either 1 or 0) 502 * @return An error string or NULL on success 503 */ 504 AP_DECLARE_NONSTD(const char *) ap_set_flag_slot(cmd_parms *cmd, 505 void *struct_ptr, 506 int arg); 507 /** 508 * Generic command handling function for files 509 * @param cmd The command parameters for this directive 510 * @param struct_ptr pointer into a given type 511 * @param arg The argument to the directive 512 * @return An error string or NULL on success 513 */ 514 AP_DECLARE_NONSTD(const char *) ap_set_file_slot(cmd_parms *cmd, 515 void *struct_ptr, 516 const char *arg); 517 /** 518 * Generic command handling function to respond with cmd- help as an error 519 * @param cmd The command parameters for this directive 520 * @param struct_ptr pointer into a given type 521 * @param arg The argument to the directive 522 * @return The cmd- help value as the error string 523 * @tip This allows simple declarations such as; 524 * pre 525 * AP_INIT_RAW_ARGS("Foo", ap_set_deprecated, NULL, OR_ALL, 526 * "The Foo directive is no longer supported, use Bar"), 527 * /pre 528 */ 529 AP_DECLARE_NONSTD(const char *) ap_set_deprecated(cmd_parms *cmd, 530 void *struct_ptr, 531 const char *arg); 532 /** 533 * For modules which need to read config files, open logs, etc. this returns 534 * the canonical form of fname made absolute to ap_server_root. 535 * @param p pool to allocate data from 536 * @param fname The file name 537 */ 538 AP_DECLARE(char *) ap_server_root_relative(apr_pool_t *p, const char *fname); 539 540 /* Finally, the hook for dynamically loading modules in... */ 541 542 /** 543 * Add a module to the server 544 * @param m The module structure of the module to add 545 * @param p The pool of the same lifetime as the module 546 */ 547 AP_DECLARE(void) ap_add_module(module *m, apr_pool_t *p); 548 549 /** 550 * Remove a module from the server. There are some caveats 551 * when the module is removed, its slot is lost so all the current 552 * per-dir and per-server configurations are invalid. So we should 553 * only ever call this function when you are invalidating almost 554 * all our current data. I.e. when doing a restart. 555 * @param m the module structure of the module to remove 556 */ 557 AP_DECLARE(void) ap_remove_module(module *m); 558 /** 559 * Add a module to the chained modules list and the list of loaded modules 560 * @param m The module structure of the module to add 561 * @param p The pool with the same lifetime as the module 562 */ 563 AP_DECLARE(void) ap_add_loaded_module(module *mod, apr_pool_t *p); 564 /** 565 * Remove a module fromthe chained modules list and the list of loaded modules 566 * @param m the module structure of the module to remove 567 */ 568 AP_DECLARE(void) ap_remove_loaded_module(module *mod); 569 /** 570 * Add a module to the list of loaded module based on the name of the 571 * module 572 * @param name The name of the module 573 * @param p The pool valid for the lifetime of the module 574 * @return 1 on success, 0 on failure 575 */ 576 AP_DECLARE(int) ap_add_named_module(const char *name, apr_pool_t *p); 577 /** 578 * Find the name of the specified module 579 * @param m The module to get the name for 580 * @return the name of the module 581 */ 582 AP_DECLARE(const char *) ap_find_module_name(module *m); 583 /** 584 * Find a module based on the name of the module 585 * @param name the name of the module 586 * @return the module structure if found, NULL otherwise 587 */ 588 AP_DECLARE(module *) ap_find_linked_module(const char *name); 589 590 /** 591 * Open a ap_configfile_t as apr_file_t 592 * @param ret_cfg open ap_configfile_t struct pointer 593 * @param p The pool to allocate the structure from 594 * @param name the name of the file to open 595 */ 596 AP_DECLARE(apr_status_t) ap_pcfg_openfile(ap_configfile_t **ret_cfg, 597 apr_pool_t *p, const char *name); 598 599 /** 600 * Allocate a ap_configfile_t handle with user defined functions and params 601 * @param p The pool to allocate from 602 * @param descr The name of the file 603 * @param param The argument passed to getch/getstr/close 604 * @param getc_func The getch function 605 * @param gets_func The getstr function 606 * @param close_func The close function 607 */ 608 AP_DECLARE(ap_configfile_t *) ap_pcfg_open_custom(apr_pool_t *p, 609 const char *descr, 610 void *param, 611 int(*getc_func)(void*), 612 void *(*gets_func) (void *buf, size_t bufsiz, void *param), 613 int(*close_func)(void *param)); 614 615 /** 616 * Read one line from open ap_configfile_t, strip LF, increase line number 617 * @param buf place to store the line read 618 * @param bufsize size of the buffer 619 * @param cfp File to read from 620 * @return 1 on success, 0 on failure 621 */ 622 AP_DECLARE(int) ap_cfg_getline(char *buf, size_t bufsize, ap_configfile_t *cfp); 623 624 /** 625 * Read one char from open configfile_t, increase line number upon LF 626 * @param cfp The file to read from 627 * @return the character read 628 */ 629 AP_DECLARE(int) ap_cfg_getc(ap_configfile_t *cfp); 630 631 /** 632 * Detach from open ap_configfile_t, calling the close handler 633 * @param cfp The file to close 634 * @return 1 on sucess, 0 on failure 635 */ 636 AP_DECLARE(int) ap_cfg_closefile(ap_configfile_t *cfp); 637 638 /** 639 * Read all data between the current foo and the matching /foo . All 640 * of this data is forgotten immediately. 641 * @param cmd The cmd_parms to pass to the directives inside the container 642 * @param directive The directive name to read until 643 * @return Error string on failure, NULL on success 644 */ 645 AP_DECLARE(const char *) ap_soak_end_container(cmd_parms *cmd, char *directive); 646 647 /** 648 * Read all data between the current foo and the matching /foo and build 649 * a config tree from it 650 * @param p pool to allocate from 651 * @param temp_pool Temporary pool to allocate from 652 * @param parms The cmd_parms to pass to all directives read 653 * @param current The current node in the tree 654 * @param curr_parent The current parent node 655 * @param orig_directive The directive to read until hit. 656 * @return Error string on failure, NULL on success 657 */ 658 AP_DECLARE(const char *) ap_build_cont_config(apr_pool_t *p, 659 apr_pool_t *temp_pool, 660 cmd_parms *parms, 661 ap_directive_t **current, 662 ap_directive_t **curr_parent, 663 char *orig_directive); 664 665 /** 666 * Build a config tree from a config file 667 * @param parms The cmd_parms to pass to all of the directives in the file 668 * @param conf_pool The pconf pool 669 * @param temp_pool The temporary pool 670 * @param conftree Place to store the root node of the config tree 671 * @return Error string on erro, NULL otherwise 672 */ 673 AP_DECLARE(const char *) ap_build_config(cmd_parms *parms, 674 apr_pool_t *conf_pool, 675 apr_pool_t *temp_pool, 676 ap_directive_t **conftree); 677 678 /** 679 * Walk a config tree and setup the server s internal structures 680 * @param conftree The config tree to walk 681 * @param parms The cmd_parms to pass to all functions 682 * @param section_vector The per-section config vector. 683 * @return Error string on error, NULL otherwise 684 */ 685 AP_DECLARE(const char *) ap_walk_config(ap_directive_t *conftree, 686 cmd_parms *parms, 687 ap_conf_vector_t *section_vector); 688 689 /** 690 * @defgroup ap_check_cmd_context ap_check_cmd_context 691 * @{ 692 */ 693 /** 694 * Check the context a command is used in. 695 * @param cmd The command to check 696 * @param forbidden Where the command is forbidden. 697 * @return Error string on error, NULL on success 698 */ 699 AP_DECLARE(const char *) ap_check_cmd_context(cmd_parms *cmd, 700 unsigned forbidden); 701 702 #define NOT_IN_VIRTUALHOST 0x01 /** Forbidden in Virtualhost */ 703 #define NOT_IN_LIMIT 0x02 /** Forbidden in Limit */ 704 #define NOT_IN_DIRECTORY 0x04 /** Forbidden in Directory */ 705 #define NOT_IN_LOCATION 0x08 /** Forbidden in Location */ 706 #define NOT_IN_FILES 0x10 /** Forbidden in Files */ 707 /** Forbidden in Directory / Location / Files */ 708 #define NOT_IN_DIR_LOC_FILE (NOT_IN_DIRECTORY|NOT_IN_LOCATION|NOT_IN_FILES) 709 /** Forbidden in VirtualHost / Limit / Directory / Location / Files */ 710 #define GLOBAL_ONLY (NOT_IN_VIRTUALHOST|NOT_IN_LIMIT|NOT_IN_DIR_LOC_FILE) 711 712 /** @} */ 713 714 #ifdef CORE_PRIVATE 715 716 /** 717 * The topmost module in the list 718 * @defvar module *ap_top_module 719 */ 720 AP_DECLARE_DATA extern module *ap_top_module; 721 722 /** 723 * Array of all statically linked modules 724 * @defvar module *ap_prelinked_modules[] 725 */ 726 AP_DECLARE_DATA extern module *ap_prelinked_modules[]; 727 /** 728 * Array of all preloaded modules 729 * @defvar module *ap_preloaded_modules[] 730 */ 731 AP_DECLARE_DATA extern module *ap_preloaded_modules[]; 732 /** 733 * Array of all loaded modules 734 * @defvar module **ap_loaded_modules 735 */ 736 AP_DECLARE_DATA extern module **ap_loaded_modules; 737 738 /* For mod_so.c... */ 739 /** Run a single module s two create_config hooks 740 * @param p the pool to allocate from 741 * @param s The server to configure for. 742 * @param m The module to configure 743 */ 744 AP_DECLARE(void) ap_single_module_configure(apr_pool_t *p, server_rec *s, 745 module *m); 746 747 /* For http_main.c... */ 748 /** 749 * Add all of the prelinked modules into the loaded module list 750 * @param process The process that is currently running the server 751 */ 752 AP_DECLARE(void) ap_setup_prelinked_modules(process_rec *process); 753 754 /** 755 * Show the preloaded configuration directives, the help string explaining 756 * the directive arguments, in what module they are handled, and in 757 * what parts of the configuration they are allowed. Used for httpd -h. 758 */ 759 AP_DECLARE(void) ap_show_directives(void); 760 761 /** 762 * Show the preloaded module names. Used for httpd -l. 763 */ 764 AP_DECLARE(void) ap_show_modules(void); 765 766 /** 767 * Show the MPM name. Used in reporting modules such as mod_info to 768 * provide extra information to the user 769 */ 770 AP_DECLARE(const char *) ap_show_mpm(void); 771 772 /** 773 * Read all config files and setup the server 774 * @param process The process running the server 775 * @param temp_pool A pool to allocate temporary data from. 776 * @param config_name The name of the config file 777 * @param conftree Place to store the root of the config tree 778 * @return The setup server_rec list. 779 */ 780 AP_DECLARE(server_rec *) ap_read_config(process_rec *process, 781 apr_pool_t *temp_pool, 782 const char *config_name, 783 ap_directive_t **conftree); 784 785 /** 786 * Run all rewrite args hooks for loaded modules 787 * @param process The process currently running the server 788 */ 789 AP_DECLARE(void) ap_run_rewrite_args(process_rec *process); 790 791 /** 792 * Run the register hooks function for a specified module 793 * @param m The module to run the register hooks function fo 794 * @param p The pool valid for the lifetime of the module 795 */ 796 AP_DECLARE(void) ap_register_hooks(module *m, apr_pool_t *p); 797 798 /** 799 * Setup all virtual hosts 800 * @param p The pool to allocate from 801 * @param main_server The head of the server_rec list 802 */ 803 AP_DECLARE(void) ap_fixup_virtual_hosts(apr_pool_t *p, 804 server_rec *main_server); 805 806 /* For http_request.c... */ 807 808 /** 809 * Setup the config vector for a request_rec 810 * @param p The pool to allocate the config vector from 811 * @return The config vector 812 */ 813 AP_CORE_DECLARE(ap_conf_vector_t*) ap_create_request_config(apr_pool_t *p); 814 815 /** 816 * Setup the config vector for per dir module configs 817 * @param p The pool to allocate the config vector from 818 * @return The config vector 819 */ 820 AP_CORE_DECLARE(ap_conf_vector_t *) ap_create_per_dir_config(apr_pool_t *p); 821 822 /** 823 * Run all of the modules merge per dir config functions 824 * @param p The pool to pass to the merge functions 825 * @param base The base directory config structure 826 * @param new_conf The new directory config structure 827 */ 828 AP_CORE_DECLARE(ap_conf_vector_t*) ap_merge_per_dir_configs(apr_pool_t *p, 829 ap_conf_vector_t *base, 830 ap_conf_vector_t *new_conf); 831 832 /* For http_connection.c... */ 833 /** 834 * Setup the config vector for a connection_rec 835 * @param p The pool to allocate the config vector from 836 * @return The config vector 837 */ 838 AP_CORE_DECLARE(ap_conf_vector_t*) ap_create_conn_config(apr_pool_t *p); 839 840 /* For http_core.c... ( Directory command and virtual hosts) */ 841 842 /** 843 * parse an htaccess file 844 * @param resulting htaccess_result 845 * @param r The request currently being served 846 * @param override Which overrides are active 847 * @param path The path to the htaccess file 848 * @param access_name The list of possible names for .htaccess files 849 * int The status of the current request 850 */ 851 AP_CORE_DECLARE(int) ap_parse_htaccess(ap_conf_vector_t **result, 852 request_rec *r, int override, 853 const char *path, 854 const char *access_name); 855 856 /** 857 * Setup a virtual host 858 * @param p The pool to allocate all memory from 859 * @param hostname The hostname of the virtual hsot 860 * @param main_server The main server for this Apache configuration 861 * @param ps Place to store the new server_rec 862 * return Error string on error, NULL on success 863 */ 864 AP_CORE_DECLARE(const char *) ap_init_virtual_host(apr_pool_t *p, 865 const char *hostname, 866 server_rec *main_server, 867 server_rec **); 868 869 /** 870 * Process the config file for Apache 871 * @param s The server rec to use for the command parms 872 * @param fname The name of the config file 873 * @param conftree The root node of the created config tree 874 * @param p Pool for general allocation 875 * @param ptem Pool for temporary allocation 876 */ 877 AP_DECLARE(void) ap_process_resource_config(server_rec *s, const char *fname, 878 ap_directive_t **conftree, 879 apr_pool_t *p, apr_pool_t *ptemp); 880 881 /** 882 * Process all directives in the config tree 883 * @param s The server rec to use in the command parms 884 * @param conftree The config tree to process 885 * @param p The pool for general allocation 886 * @param ptemp The pool for temporary allocations 887 */ 888 AP_DECLARE(void) ap_process_config_tree(server_rec *s, ap_directive_t *conftree, 889 apr_pool_t *p, apr_pool_t *ptemp); 890 891 /* Module-method dispatchers, also for http_request.c */ 892 /** 893 * Run the handler phase of each module until a module accepts the 894 * responsibility of serving the request 895 * @param r The current request 896 * @return The status of the current request 897 */ 898 AP_CORE_DECLARE(int) ap_invoke_handler(request_rec *r); 899 900 /* for mod_perl */ 901 902 /** 903 * Find a given directive in a command_rec table 904 * @param name The directive to search for 905 * @param cmds The table to search 906 * @return The directive definition of the specified directive 907 */ 908 AP_CORE_DECLARE(const command_rec *) ap_find_command(const char *name, 909 const command_rec *cmds); 910 911 /** 912 * Find a given directive in a list module 913 * @param cmd_name The directive to search for 914 * @param mod The module list to search 915 * @return The directive definition of the specified directive 916 */ 917 AP_CORE_DECLARE(const command_rec *) ap_find_command_in_modules(const char *cmd_name, 918 module **mod); 919 920 /** 921 * Ask a module to create per-server and per-section (dir/loc/file) configs 922 * (if it hasn t happened already). The results are stored in the server s 923 * config, and the specified per-section config vector. 924 * @param server The server to operate upon. 925 * @param section_vector The per-section config vector. 926 * @param section Which section to create a config for. 927 * @param mod The module which is defining the config data. 928 * @param pconf A pool for all configuration allocations. 929 * @return The (new) per-section config data. 930 */ 931 AP_CORE_DECLARE(void *) ap_set_config_vectors(server_rec *server, 932 ap_conf_vector_t *section_vector, 933 const char *section, 934 module *mod, apr_pool_t *pconf); 935 936 #endif 937 938 /* Hooks */ 939 940 /** 941 * Run the header parser functions for each module 942 * @param r The current request 943 * @return OK or DECLINED 944 */ 945 AP_DECLARE_HOOK(int,header_parser,(request_rec *r)) 946 947 /** 948 * Run the pre_config function for each module 949 * @param pconf The config pool 950 * @param plog The logging streams pool 951 * @param ptemp The temporary pool 952 * @return OK or DECLINED on success anything else is a error 953 */ 954 AP_DECLARE_HOOK(int,pre_config,(apr_pool_t *pconf,apr_pool_t *plog, 955 apr_pool_t *ptemp)) 956 957 958 /** 959 * Run the post_config function for each module 960 * @param pconf The config pool 961 * @param plog The logging streams pool 962 * @param ptemp The temporary pool 963 * @param s The list of server_recs 964 * @return OK or DECLINED on success anything else is a error 965 */ 966 AP_DECLARE_HOOK(int,post_config,(apr_pool_t *pconf,apr_pool_t *plog, 967 apr_pool_t *ptemp,server_rec *s)) 968 969 /** 970 * Run the open_logs functions for each module 971 * @param pconf The config pool 972 * @param plog The logging streams pool 973 * @param ptemp The temporary pool 974 * @param s The list of server_recs 975 * @return OK or DECLINED on success anything else is a error 976 */ 977 AP_DECLARE_HOOK(int,open_logs,(apr_pool_t *pconf,apr_pool_t *plog, 978 apr_pool_t *ptemp,server_rec *s)) 979 980 /** 981 * Run the child_init functions for each module 982 * @param pchild The child pool 983 * @param s The list of server_recs in this server 984 */ 985 AP_DECLARE_HOOK(void,child_init,(apr_pool_t *pchild, server_rec *s)) 986 987 /** 988 * Run the handler functions for each module 989 * @param r The request_rec 990 * @remark non-wildcard handlers should HOOK_MIDDLE, wildcard HOOK_LAST 991 */ 992 AP_DECLARE_HOOK(int,handler,(request_rec *r)) 993 994 /** 995 * Run the quick handler functions for each module. The quick_handler 996 * is run before any other requests hooks are called (location_walk, 997 * directory_walk, access checking, et. al.). This hook was added 998 * to provide a quick way to serve content from a URI keyed cache. 999 * 1000 * @param r The request_rec 1001 * @param lookup_uri Controls whether the caller actually wants content or not. 1002 * lookup is set when the quick_handler is called out of 1003 * ap_sub_req_lookup_uri() 1004 */ 1005 AP_DECLARE_HOOK(int,quick_handler,(request_rec *r, int lookup_uri)) 1006 1007 /** 1008 * Retrieve the optional functions for each module. 1009 * This is run immediately before the server starts. Optional functions should 1010 * be registered during the hook registration phase. 1011 */ 1012 AP_DECLARE_HOOK(void,optional_fn_retrieve,(void)) 1013 1014 #ifdef __cplusplus 1015 } 1016 #endif 1017 1018 #endif /* !APACHE_HTTP_CONFIG_H */
https://w.atwiki.jp/sicpstudygroup/pages/37.html
Exercise2.1 (define (make-rat n d) (let* ((g (gcd n d)) (nn (quotient n g)) (nd (quotient d g))) (if (negative? nd) (cons (- nn) (- nd)) (cons nn nd)))) by iwk (define (make-rat n d) (let ((g (gcd n d))) (if (negative? (* n d)) (cons (- (/ (abs n) g)) (/ (abs d) g)) (cons (/ (abs n) g) (/ (abs d) g))))) by alaskan Exercise2.2 (define (make-point x y) (if (and (exact? x) (exact? y)) (cons x y) (error "Argument not integer"))) (define x-point car) (define y-point cdr) (define (point? p) (and (pair? p) (exact? (car p)) (exact? (cdr p)))) (define (make-segment start end) (if (and (point? start) (point? end)) (cons start end) (error "Argument not point"))) (define (segment? seg) (and (pair? seg) (point? (car seg)) (point? (cdr seg)))) (define (start-segment seg) (if (segment? seg) (car seg) (error "Argument not segment"))) (define (end-segment seg) (if (segment? seg) (cdr seg) (error "Argument not segment"))) (define (midpoint-segment seg) (let* ((start (start-segment seg)) (end (end-segment seg)) (xsum (+ (x-point start) (x-point end))) (ysum (+ (y-point start) (y-point end)))) (make-point (quotient xsum 2) (quotient ysum 2)))) (define (print-point p) (newline) (display "(") (display (x-point p)) (display ",") (display (y-point p)) (display ")")) by iwk Exercise2.3 ;;; 表現1 左下の点と右上の点によって長方形を表現 (define (make-rectangle lb rt) (cons lb rt)) (define (left-bottom rect) (car rect)) (define (right-top rect) (cdr rect)) ;;; 縦の辺の長さ (define (height rect) (abs (- (y-point (left-bottom rect)) (y-point (right-top rect))))) ;;; 横の辺の長さ (define (width rect) (abs (- (x-point (left-bottom rect)) (x-point (right-top rect))))) ;;; 表現2 縦の辺と横の辺によって表現 (辺は線分で表現) (define (make-rectangle h w) (cons h w)) (define (vertical rect) (car rect)) (define (horizontal rect) (cdr rect)) ;;; 縦の辺の長さ (define (height rect) (abs (- (y-point (end-segment (vertical rect))) (y-point (start-segment (vertical rect)))))) ;;; 横の辺の長さ (define (width rect) (abs (- (x-point (end-segment (horizontal rect))) (x-point (start-segment (horizontal rect)))))) ;;; 周囲の長さ と 面積 (define (perimeter rect) (* 2 (+ (height rect) (width rect)))) (define (area rect) (* (height rect) (width rect))) by chrono Exercise2.4 (define (mycdr z) (z (lambda (p q) q))) by iwk Exercise2.5 (define (my-cons a b) (* (expt 2 a) (expt 3 b))) (define (my-car z) (if (even? z) (+ 1 (my-car (/ z 2))) 0)) (define (my-cdr z) (if (= 0 (remainder z 3)) (+ 1 (my-cdr (/ z 3))) 0)) by iriya Exercise2.6 (define zero (lambda (f) (lambda(x) x))) (define (add-1 n) (lambda (f) (lambda (x) (f ((n f) x))))) (add-1 zero) -β- λ f.λ x.(f ((zero f) x)) -β- λ f.λ x.(f ((λ y.y) x)) -β- λ f.λ x (f x) (define one (lambda (f) (lambda (x) (f x)))) (add-1 one) -β- λ f.λ x.(f ((one f) x)) -β- λ f.λ x.(f ((λ y.(f y)) x)) -β- λ f.λ x.(f (f x)) (define two (lambda (f) (lambda (x) (f (f x))))) (define (plus a b) (letrec ((compose (lambda (x y) (lambda (z) (x (y z)))))) (lambda (f) (compose (a f) (b f))))) 具体的にβ変換してみる plus one two -β- λ f. compose (one f) (two f) -β- λ f.λ z.((one f) ((two f) z)) -β- λ f.λ z.((λx.f x) ((λx.ff x) z)) -β- λ f.λ z.((λx.f x) (ff z)) -β- λ f.λ z.(fff z)) = third これは加法になっている。 by iwk Exercise2.7 (define (upper-bound iv) (cdr iv)) (define (lower-bound iv) (car iv)) by iwk Exercise2.8 (define (sub-interval x y) (make-interval (- (lower-bound x) (upper-bound y)) (- (upper-bound x) (lower-bound y)))) by iwk Exercise2.9 The width of an interval is half of the difference between its upper and lower bounds. The width is a measure of the uncertainly of the number specified by the interval. For some arithmetic operations the width of the result of combining two intervals is a function only of the widths of the argument intervals, whereas for others the width of the combination is not a function of the widths of the argument intervals. Show that the width of the sum (of difference) of two intervals is a function only of the widths of the intervals being added (or subtracted). Give examples to show that this is not true for multiplication or division. 一つのintervalのwidthはintervalの上限と下限の差の半分である。そのwidthはintervalによって指定される数の不明確な測度である。いくつかの数値演算において、2つのintervalを組み合わせた結果のwidthはその2つのintervalのwidthできまる関数となる、一方それら以外の数値演算においてはそのようなことは成り立たない。2つのintervalの和(差)のwidthはその加えられた(引かれた)intervalのそれぞれのwidthの関数であることを示せ。さらに積と商においては上記の事柄は成り立たないことを示す例を挙げよ。 (define (width x) (/ (- (upper-bound x) (lower-bound x)) 2.0)) (define (add-width x y) (width (add-interval x y))) ;; add-width (a,b) (c,d) ;; width (add-interval (a,b) (c,d)) ;; width ((+ a c), (+ b d)) ;; (/ (- (+ b d) (+ a c)) 2) ;; (/ (+ (- b a) (- d c)) 2) ;; (+ (/ (- b a) 2) (/ (- d c) 2)) ;; (+ (width (a,b)) (width (c,d))) (define (sub-width x y) (width (sub-interval x y))) ;; sub-width (a,b) (c,d) ;; width (sub-interval (a,b) (c,d)) ;; width ((- b c),(- a d)) ;; width ((+ b (- c)),(+ a (- d))) ;; (/ (- (+ b (- c)) (+ a (- d))) 2) ;; (/ (+ (+ b (- c)) (+ (- a) d)) 2) ;; (/ (+ (- a) b (- c) d) 2) ;; (/ (+ (- b a) (- d c)) 2) ;; (- (/ (- b a) 2) (/ (- d c) 2)) ;; (- (width (a,b)) (width (c,d))) よってadd-interval,sub-intervalは+,-の演算に書き換えられた。= widthの関数となる。 一方mul-intervalは gosh (define x (make-interval 1 4)) x gosh (define y (make-interval 3 5)) y gosh (* (width x) (width y)) 10.0 gosh (width (mul-interval x y)) 11.5 と一致しない。= width の関数とならない div-intervalは内部でmul-intervalを呼び出しているので同様に成り立たない。 Exercise2.10 (define (div-interval x y) (define (span-zero? ival) (let ((product (* (upper-bound ival) (lower-bound ival)))) (and (= ival 0) (negative? ival)))) (if (span-zero? y) (error "the interval spans zero" y) (mul-interval x (make-interval (/ 1.0 (upper-bound y)) (/ 1.0 (lower-bound y)))) by iwk Exercise2.11 Exercise2.12 Exercise2.13 Exercise2.14 Exercise2.15 Exercise2.16
https://w.atwiki.jp/tar0_puzzle/pages/35.html
Chapter 2.2.1 名前 Exercise 2.17 (define (last-pair ls) (if (null? (cdr ls)) (car ls) (last-pair (cdr ls)))) Exercise 2.18 (define (rev ls) (define (iter ls re) (if (null? (cdr ls)) (cons (car ls) re) (iter (cdr ls) (cons (car ls) re)))) (iter (cdr ls) (cons (car ls) ()))) Exercise 2.19 (define us-coins (list 50 25 10 5 1)) (define uk-coins (list 100 50 20 10 5 2 1 0.5)) (define (cc amount coin-values) (define (first-denomination coin) (car coin)) (define (no-more? coin) (null? coin)) (define (except-first-denomination coin) (cdr coin)) (cond ((= amount 0) 1) ((or ( amount 0) (no-more? coin-values)) 0) (else (+ (cc amount (except-first-denomination coin-values)) (cc (- amount (first-denomination coin-values)) coin-values))))) Exercise 2.20 ;排他的論理和を用いればもっと簡単に書ける (define (same-parity x . z) (define (same-odd ls) (if (null? ls) () (if (odd? (car ls)) (cons (car ls) (same-odd (cdr ls))) (same-odd (cdr ls))))) (define (same-even ls) (if (null? ls) () (if (even? (car ls)) (cons (car ls) (same-even (cdr ls))) (same-even (cdr ls))))) (if (odd? x) (cons x (same-odd z)) (cons x (same-even z)))) Exercise 2.21 (define (square x) (* x x)) (define (square-list1 items) (if (null? items) () (cons (square (car items)) (square-list1 (cdr items))))) (define (square-list2 items) (map square items)) Exercise 2.22 Exercise 2.23 (define (for-each1 proc items) (if (null? items) #t (begin (proc (car items)) (for-each proc (cdr items)))))
https://w.atwiki.jp/rsbuygoldq/pages/72.html
if that s the case, must replenish about driver additionally fossil gas concurrently, Given that will require ready ahead of knutson these individuals. Approaching is unquestionably so that you can generate for around 10, 000 driver additionally 50, 000 fossil gas a href="http //www.4rsgold.com/" strong Buy RS Gold /strong /a . the next phase is to enable you to smelt any professional photographer additionally vessel within any air conditioner to produce 500 bronze discos. you could set up about 10 moments weekly as well as other claims are usually popular, however poor. you never notice virtually any ways to stop suit and also slender. starting to be way typically needs get the job done in addition to the typical method is unquestionably 20 moments together with large vitality activity several occasions weekly. men and women provides the must get yourself a excellent industry sedentary condition and in addition extroverted identify. nevertheless, support any crap modus vivendi, as an example by no means profiting from exercising and also ingesting unhealthy food, concerns any for ifs low-cost rs rare metal on the market fertile. and perchance weighty. gradually, any person continues to be contemplating any nutritional shoreline s substandard quality is unquestionably properly, However people dismiss the health conditions together with oceans safe-keeping gadgets products. quite a few experiencing oceans barrels through the use of undiscovered kick off point a href="http //www.4rsgold.com/" strong Runescape Gold /strong /a , however, not simply become plenty of restricted gain -building corporation alternatives, additionally brought up any obscured genuine risk to enable you to the particular physical fitness of an individual. net precisely the identical curve, truth be told, the data introduced coming from baseball bat berrel together with experiencing oceans acquired you could acquire deviates tremendously.
https://w.atwiki.jp/cohwbg/pages/33.html
目次 総合Tips #1 死角 総合Tips #2 待機中の部隊 総合Tips #3 駐屯している部隊(建物内の部隊) 基本Tips #4:Retreating(退却) 基本Tips #5:Enemy Footsteps(敵の足音) 基本Tips #6:Dropped Weapon(落ちている武器) 基本Tips #7:Artillery(砲撃要請) 基本Tips #8:Sniperでの監視 基本Tips #9:Panzershrenks/Bazookas (バズーカ/パンツァーシュレック) 基本Tips #10:Avoiding Grenades(手榴弾を避ける) 基本Tips #11:Mortar Accuracy and Damage(Mortar部隊の命中精度とダメージ) 基本Tips #12:Mine/Barbwire Combo(地雷と鉄条網の連携) 基本Tips #13:The Tactical Map(戦略マップ) 基本Tips #14:Unmanned AT Guns(クルーが居ないAT Gun) 基本Tips #15:tracking Enemy Snipers(敵Sniperの追跡) 基本Tips #16:Turning the Tide(ゲームの流れを変える) 基本Tips #17:Upgraded Infantry(アップグレードした歩兵) 基本Tips #18:Micro and Macro(細かい操作と広い視野) 基本Tips #19:Mine-triggering(地雷の起爆) 基本Tips #20:Anti-Tank Guns(対戦車砲) 基本Tips #21:Reload Times(リロード時間) 基本Tips #22:バンカーの守備 General Tip #23 - Dancing [10/29/2006] General Tip #24 - Grenades vs Garrisoned Troops [10/30/2006] General Tip #25 - Backing Up [10/31/2006] General Tip #26 - Know Your Enemy! [11/1/2006] General Tip #27 - Kiting [11/2/2006] General Tip #28 - Killing Snipers [11/4/2006] General Tip #29 - Hiding [11/6/2006] General Tip #30 - One Way Door [11/7/2006] General Tip #31 - Control Groups [11/9/2006] General Tip #32 - Garrisoned Snipers [11/10/2006] General Tip #33 - Riflemen vs Garrisoned MG's [11/13/2006] General Tip #34 - Destroying Hedgerows [11/14/2006] General Tip #35 - Tactical Map [11/27/2006] General Tip #36 - Attack Ground [01/01/2007] General Tip #37 - Pioneers vs Engineers [01/15/2007] General Tip #38 - Medic Bunkers [01/22/2007] General Tip #39 - Evading with Sniper [02/05/2007] General Tip #40 - Tanks [02/12/2007] General Tip #41 - Cover [02/18/2007] General Tip #42 - Roadways [03/12/2007] General Tip #43 - Rally points from buildings [03/19/2007] General Tip #44 - Using Shift+Click [03/26/2007] General Tip #45 - Tabbing Units [04/02/2007] General Tip #46 - Camo-Counters [04/09/2007] General Tip #47 - Countering Barbed Wire [04/16/2007] General Tip #48 - Control Sectors [04/30/07] General Tip #49 - Unit/Resource Management [05/06/07] General Tip #50 - Selective Exiting [05/14/07] General Tip #51 - MG/Sniper Counter [28/05/07] General Tip #52 - The Dead Have Eyes [04/06/2007] General Tip #53 - Targetting in Large Scale Engagements [6/10/07] General Tip #54 - Overextending [7/02/07] General Tip #55 - Anti-spam [7/16/07] General Tip #56 - Early Game Tips [7/30/07] General Tip #57 - Advanced Mine Tactics [12/8/07] General Tip #58 - Pursuing and retreating [30/8/07] General Tips /General Tips 1~10 General Tip #1 - Blind Spots (9-5-2006) General Tip #2 - Idle Units (9-10-2006) General Tip #3 - Garrisoned Units (9-15-2006) General Tip #4 - Retreating (9-20-2006) General Tip #5 - Enemy Footsteps (9-26-2006) General Tip #6 - Dropped Weapons (10-1-2006) General Tip #7 - Artillery (10-2-2006) General Tip #8 - Sniper Spotters(10-3-2006) General Tip #9 - Panzershrenks/Bazookas (10-7-2006)? General Tip #10 - Avoiding Grenades (10-8-2006) General Tip #11 - Mortar Accuracy and Damage (10-10-2006) General Tip #12 - Mine/Barb Wire Combo (10-11-2006)? General Tip #13 - The Tactical Map (10-12-2006) General Tip #14 - Unmanned AT Guns (10-13-2006) General Tip #15 - Tracking Enemy Snipers (10-16-2006) General Tip #16 - Turning the Tide (10-17-2006) General Tip #17 - Upgraded Infantry (10-19-2006) General Tip #18 - Micro & Macro (10-20-2006) General Tip #19 - Mine Triggering (10-21-2006) General Tip #20 - Anti-Tank Guns (10-24-2006) General Tip #21 - Reload Times (10-24-2006) General Tip #22 - Garrisoned Bunkers/MG Nests (10-27-2006)? 総合Tips #1 死角 建物の中には、建物内のユニットが撃てない方向(死角)がある。これを使えば駐屯しているMGを撃ったり、手榴弾を投げ入れるような場合に犠牲を出すことなく建物に近づくことができる。 逆に自分のユニットを建物に入れる場合は建物の死角を確認し、その場所を他のMGや歩兵でカバーするようにすることを忘れないように。 総合Tips #2 待機中の部隊 待機中の部隊を活用させよう。もし、PioneerやEngeneerが何もしていないなら、敵の旗を取るように命令を出す。相手の旗にちょっかいを出すことで、相手の注意をそこに向けることができる。 さらに、旗を取られないために相手はそこに兵力を分散させなくてはならなくなる。相手の兵力が分散すれば、こちらの攻撃もより簡単になる。 他にできるのは、地雷を施設したり、ワイヤを張ったり、土嚢を作ったり、戦車妨害をつくったりする等。これらの防御設備を駆使すれば、相手の主戦力の進行を遅らせたり、あるいは、増援を送ることを阻止できるようになる。 待機中の部隊をできるだけなくすようにしよう。 総合Tips #3 駐屯している部隊(建物内の部隊) 駐屯している部隊に直接、特定のターゲットへの攻撃を指示することはできない。しかし、家単位、建物単位で彼らを選択すれば、彼らにどの敵部隊を攻撃するかを指示できる。 例えば、あなたがMGを駐屯させていて、それぞれ違う方向からVolksgrenadiersと火炎放射機を持ったPionnerが近づいてきたとする。駐屯しているMGに火炎放射兵を攻撃するように支持することでMGをみすみす死なせずにすることができる。 基本Tips #4:Retreating(退却) 元記事 http //www.gamereplays.org/community/index.php?showtopic=140093 退却はゲーム内のアビリティのなかで、とても使い勝手の良い部類に入ります。 ある部隊が苦しい状況に陥った際に(MGに撃たれている、数的不利や全滅寸前等) その部隊を選択し、"T"キーを押す事で司令部まで退却させる事が出来ます。 退却中は大きな守備ボーナスが付き、移動速度も速くなります。 退却は部隊を司令部周辺まで速く戻したい時にも有効な手段です。 しかし守備ボーナスが付くとはいっても、敵部隊からの攻撃が無効になるわけではありません。 Sniper等は敵の攻撃に弱いことに変わりはないので、ユニットを退却させる場合には退却経路に注意する必要があります。 Pinned(釘付け)になった部隊は殆ど使い物にならないので、通常は退却させる事が被害を減らす最善の手段です。 退却を上手く利用する事で部隊の補充や代替部隊生産などのコストを抑える事ができるでしょう。 基本Tips #5:Enemy Footsteps(敵の足音) 元記事 http //www.gamereplays.org/community/index.php?showtopic=141752 未占拠状態のエリアにHMG部隊を単独で送り込む場合、部隊周辺の画面に切り替えて足音を聞くようにします。 敵部隊の喋り声や足音が不可視エリアから聞こえてくる場合があります。 敵部隊の声や足音を確認したら、HMGを迎撃態勢にして敵の不意を突きましょう。 このように敵の不意を突ければ、敵小隊の何人かを倒し、かつこちらのHMG部隊の損失、退却を防げます。 敵小隊が全滅もしくは退却したら、HMG部隊を当初の目的の場所へ配置しましょう。 ゲーム序盤でHMG部隊の全滅や退却という致命的な状況を回避するにあたって、このテクニックは有効です。 基本Tips #6:Dropped Weapon(落ちている武器) 元記事 http //www.gamereplays.org/community/index.php?showtopic=143349 役立ちそうな武器(重火器以外)は確実に拾っておきましょう。 例えばGrenadierがRiflemanの落としたBARを拾えば、対歩兵攻撃力を増すことになります。 またRiflemanがBazooka/Panzershrekを拾えば、対戦車部隊となるでしょう。 Engineer/Pioneerが最前線で戦車を修理しながらBazooka/Panzershrekを撃っている姿を想像して下さい。 戦車戦の最前線において、とても効果的ではないでしょうか。 BARを持ったPioneerは、Pioneerは優れたEngineerに匹敵しないと思い込んでいる敵を驚かせる結果を生むでしょう。 もしあなたが戦車隊を、そして相手がAT砲を数多く持っている場合、 AT砲のクルーを倒した後、残されたAT砲に戦車で「Ground Attack」を仕掛ける事で、残されたAT砲を破壊する事が可能です。 これは相手のAT砲を除去する為の効果的な手法です。 落ちている武器を効果的に使うことでゲームの流れを変える事が出来るでしょう。 基本Tips #7:Artillery(砲撃要請) 元記事 http //www.gamereplays.org/community/index.php?showtopic=143791 あなたが敵陣への反撃を考えているときに、複数の敵部隊を本陣へ退却させる事が出来たら 装甲車を敵司令部に素早く向かわせ、敵司令部とその周りの部隊へ砲撃要請をすることで、敵部隊をも巻き込む最大限の効果を得られる場合があります。 タイミングが完璧であれば、相手は何も出来ません。 また敵が混乱していたり、1箇所に敵部隊が固まっている時にも砲撃要請は有効ですが、敵側も着弾数秒前から確認出来ます。 基本Tips #8:Sniperでの監視 元記事 http //www.gamereplays.org/community/index.php?showtopic=144108 Sniperは高コストで打たれ弱いユニットですが対Sniper用に使えたりと概ね有用で、中でも砲撃の監視役として最適です。 この砲撃監視はMortar部隊との組み合わせで有効です。 Mortarの砲撃範囲は部隊の視界外まで及びます。 Sniperで敵部隊の位置を見ながら、砲撃を行う事が可能になります。 射程距離が長いので、Mortar部隊を自分の戦力で守る事も容易でしょう。 相手はその場所をあきらめて退却せざるを得ないので、その隙に防衛線を押し上げていきます。 またマップ外からの砲撃支援や105mm howitzers、NebelwerferやWalking Stuka等でも、この戦術によって相手の予想しない打撃を与える事が出来ます。 身を隠しての監視により、敵が見ていないポイントへの砲撃を行い、敵軍へ打撃を与える事が出来ます。 (※注 敵はこちらの視界を考慮して戦っている為、こちらの視界外と思い込んでいる場所への砲撃は不意打ちになり得ます。) 敵戦車や部隊をしつこく狙っていく事で、敵はミニマップ上の表示に集中せざるを得なくなります。 基本Tips #9:Panzershrenks/Bazookas (バズーカ/パンツァーシュレック) 元記事 http //www.gamereplays.org/community/index.php?act=ST f=1252 t=145358 st=0#entry1769919 Panzershrenk/Bazookaを使う際に、覚えておきたい5項目。 1.部隊を広く散開させて、様々な角度から戦車を攻撃する 2.Riflemanでsticky bombを使う時のように、出来る限り接近する事 Panzershrenkは8yd以内で100%、17yd以内で60%の命中率。 Bazookaは8yd以内で100%、17yd以内で40%の命中率。 ちなみにsticky bombの投擲可能距離が17yd。 3.出来るだけ遮蔽物を利用する 石壁であったり、戦車主砲が貫通しない残骸等。 4.Panzershrenk/Bazookaはリロード(再充填)に7.5秒掛かる 撃った後3秒間はその場から離れ、次の3秒で目標に再接近する。 (遮蔽物に身を隠す事を忘れずに) 5.部隊が全滅して落としたPanzershrenk/Bazookaは必ず回収し、敵に渡さない事 1人だけの部隊でもPanzershrenk/Bazookaを2本回収する事が可能で、その部隊の人員補充をする事により、別の一人が自動的にPanzershrenk/Bazookaを装備します。 ※追記 連合のRangerでThompsonのupgradeを行った場合、1部隊で4本のバズーカを所有出来るとの事です。 (Tips本文以下のポスト参照) 基本Tips #10:Avoiding Grenades(手榴弾を避ける) 元記事 http //www.gamereplays.org/community/index.php?showtopic=145715 歩兵で銃撃戦をしている最中、特に敵歩兵部隊との距離が近い時には、敵歩兵の動きに注意しましょう。 敵部隊の一人が手榴弾を投げる動作を確認出来れば、あなたの部隊は余裕を持ってその手榴弾を避ける事が出来ます。 ※追記 手榴弾は回線遅延の関係でグラフィックから実際の炸裂までタイムラグが生じる場合があります。 特にチーム戦で起こりやすい症状のようです。 (Tip本文以下のポスト参照) 基本Tips #11:Mortar Accuracy and Damage(Mortar部隊の命中精度とダメージ) 元記事 http //www.gamereplays.org/community/index.php?showtopic=146067 Mortar部隊を最大限に活用していますか? Mortar部隊は敵からの距離が画面半分程度ならば、かなりの確率で命中させる事ができます。 また1.5画面分くらいの距離であれば、十分命中させる能力があり それ以上の距離でも命中に期待は出来ます。 またもう一つ…Mortarの砲撃は対装甲にレート1の貫通力を持っています。 ちなみにRifleの対装甲貫通力はレート0.01です。 つまりMortarの砲撃は装甲車に対して、単純にフルダメージを与えられると言う事です。 (※注 レートが何を意味するのかが不明瞭ですが、レート1=100%という事でしょう。多分.sga等の設定数値だと思います。) 基本Tips #12:Mine/Barbwire Combo(地雷と鉄条網の連携) 元記事 http //www.gamereplays.org/community/index.php?showtopic=146356 地雷と鉄条網に関するちょっとしたトリックです。 鉄条網で通路を塞いだ際に、真ん中の部分だけを取り壊して、そこに地雷を設置しておきます。 こうする事でここを通ろうとする敵は、100%地雷を踏む事なり、甚大なダメージを被ることになるでしょう。 地雷が炸裂した後は、再び地雷を設置したり、鉄条網できちんと塞いだりします。 必ずしも真ん中を空ける必要もなく、地雷を逆側に置いても構いません。 工兵であろうが、車両であろうが、そこを通り抜けようとすればダメージを受けるのです。 基本Tips #13:The Tactical Map(戦略マップ) 元記事 http //www.gamereplays.org/community/index.php?showtopic=146761 戦略マップでは部隊がアイコンで選択出来るので、ゲームスタート時などに便利です。 HQでEngineerを生産し、初期Engineerに施設建設を命令したら戦略マップを表示します。 戦略マップ上で工兵にShift+右クリックで拠点占領の行動予約をしておきます。 こうする事で無駄な操作や画面移動を省略する事が出来ます。 また自陣で待機しているユニットを前線へ動かしたい、 しかし戦闘中で視点を自陣まで動かし、ユニットを移動させ、また戦闘区域へ視点を戻すという作業はしたくない、という時。 ここでも戦略マップを使えば時間短縮ができ、操作量も相手に劣らなくなるでしょう。 NUM0キーを押し、自陣のユニットを動かし、再度NUM0キーを押せば元の視点にすぐ戻れます。 また自陣付近のユニットを動かしている間、戦闘状態を把握できる事も便利です。 例えば敵戦車がこちらの戦車の側面を取りに来た場合、すぐNUM0キーで元の画面に戻し、戦車に動かす事が可能です。 基本Tips #14:Unmanned AT Guns(クルーが居ないAT Gun) 元記事 http //www.gamereplays.org/community/index.php?showtopic=147051 クルーを倒した後のATGunの処理について考えた事がありますか?これには2つの選択肢があります。 1つは歩兵部隊でATGunを回収し、残った歩兵部隊を司令部等で人員補充する事です。 PioneerやEngineer以外であればATGunに人員を裂いて、残った部隊は人員補充する事が可能です。 VolksgrenaidierやRiflemanでATGunを回収し、残った部隊の人員を補充する方法が、無人のATGunを回収して自分のものにする際に一番得なやり方です。 もう一つの選択肢として、自分で回収する必要が無いが、敵に取られると困る場合、 戦車を無人のATGunの傍まで移動させ、ground attackで破壊する事です。 ground attackの際には、かなり傍まで寄らないとなかなか命中しない場合があります。 ATGunを壊す事はどちらの陣営であっても戦況に影響を及ぼし、壊した場合は若干のexpを得る事も出来ます。 まずはVolksgrenadierやRiflemanでATGunを回収し、残った部隊の人員補充をする方法をお奨めします。 基本Tips #15:tracking Enemy Snipers(敵Sniperの追跡) 元記事 http //www.gamereplays.org/community/index.php?showtopic=148323 敵Sniperに自分の兵士が攻撃された時には、画面左端に出る警告メッセージをチェックして下さい。 "Unit Sniped"という表示の脇の赤いアイコンをクリックすると、画面が敵Sniperの場所に飛びます。 アイコンが消えるまでは何回でもクリックでき、その間は敵Sniperが移動しても追跡する事が可能です。 ※スペースキーがイベントキュー発生地点に画面移動させるショートカットですので、Sniper対策に限らず活用出来ると思います。 ※Snipedのイベントキューが出た時は、ミニマップに赤い円が表示されるので、それも判断材料になります。 基本Tips #16:Turning the Tide(ゲームの流れを変える) 元記事 http //www.gamereplays.org/community/index.php?showtopic=149252 主に歩兵戦に関して言える事です。 ゲーム中に1on1の状況になった場合(Pioneer vs EngineerやRifleman vs Volks等)、その場所へもう1部隊向かわせて数的優位を作り出す事を常に心がけて下さい。 その時には、2部隊をどちらも敵部隊の正面へ置かないように。 1部隊を円を描くように回り込ませ、敵の背後を取るようにする事。 こうする事で2 engineer vs 1 Volksや2 pioneer vs 1 Riflemanでも勝機を見出す事が出来るでしょう。(多少運次第な部分はありますが) そしてもう1つ 歩兵戦の際には、良いカバーポジションを見つける事と止まる事を何より大事にして下さい。 良いカバーポジションを見つけてそこにしゃがみ、部隊が動き回るのを止めて下さい。 部隊が動きながら撃った場合の命中率は50%で、余り良くありません。 基本Tips #17:Upgraded Infantry(アップグレードした歩兵) 元記事 http //www.gamereplays.org/community/index.php?showtopic=149620 アップグレードして自動小銃(BARやMP40等)を持った部隊の場合、相手の部隊へ接近させた方がより効果的です。 長距離からでは半分がミスショットとなるでしょう。 敵に突撃することで、武器をアップグレードした効果をより発揮することが出来るでしょう。 基本Tips #18:Micro and Macro(細かい操作と広い視野) 元記事 http //www.gamereplays.org/community/index.php?showtopic=149976 これをマスターする為に努力しなければなりません。 敵と対峙する際にはいつも冷静に、集中し、そして広い視野で物事を考えなければいけません。 私がRTSゲームを始めた頃は、相手と同等もしくはそれ以上の操作や対応が出来ずに何回も負けていました。 そこで色々と練習をするようになりました。遠くからでも本陣の状態を注目することもそうです。 例えば本陣から離れたユニットを操作している間でも、時々資源を確認したり、ユニット探しのホットキー(動いていないユニットを探す)を使ってみたり。 CoHでは自陣施設のを選ぶのにF1、F2、F3…を良く使っています。 あなたが画面の中での戦いにより注目しながらも(ユニットの動きにより集中しながら)本陣を意識出来るようになった時、 あなたの中でミクロとマクロの融合が始まった、と考えます。 自分のものに出来れば、良い結果をもたらすことでしょう。 ※"Base"を「本陣」としましたが、「資源」や「自領内」など様々な意味合いを含んでいると思います。 基本Tips #19:Mine-triggering(地雷の起爆) 元記事 http //www.gamereplays.org/community/index.php?showtopic=150419 自軍のユニットが自分の設置した地雷のすぐ傍で銃撃戦をしている場合、少し遠ざかった方がいいでしょう。 敵の砲撃などで地雷が爆発する事があり、爆発範囲にいれば敵味方関係無くダメージを受けます。 特に連合M8で敷設した地雷は爆発ダメージが大きいです。 M8の地雷は即敷設が可能で、かつ2部隊を簡単に全滅させる事が出来る強力なものです。 M8で2部隊程の敵兵に接敵した場合、近寄って敵の目の前で地雷を敷設し、 車体2つ分くらい後ろに下がり、地雷を狙って起爆させるという技が使えます。 基本Tips #20:Anti-Tank Guns(対戦車砲) 元記事 http //www.gamereplays.org/community/index.php?showtopic=151513 対戦車砲は敵車両に対して最も基本且つ強力な対抗手段です。 生産に弾薬も燃料も必要無い上に、素晴らしい対車両攻撃力を持っています。 そこで対戦車砲が簡単に倒されないようにするにはどうしたらいいでしょうか? ●散開させて、上手くお互いをカバー出来るようにしましょう 距離を取る事で、砲撃によって一斉に叩く事が出来なくなります。 お互いが側面をカバー出来るように配置する事もポイントです。 1部隊が側面を取られても、他の部隊が対応出来るようにします。 枢軸であればカモフラージュを使う事で、相手に気づかれないように配置する事が出来ます。 ●敵車両の側面や背面を狙えるように配置を工夫してみましょう ●守備的に配置する場合、前面に砂嚢を積むとカバー効果が期待できます そして地雷も活用していきましょう。 対戦車砲を攻撃しに来た歩兵を制圧/釘付けにするだけでなく、側面を取りに来た車両にエンジンダメージを与える事も可能です。 ●歩兵、SniperやMortarなどから対戦車砲を守りましょう 対戦車砲は上手に配置すれば車両にやられる事はまずありません。 そこで相手は対戦車砲を歩兵で排除しようとしてくるはずです。 その為に歩兵対策をしておかなければなりません。 MG等が適任ですが、余り近くに配置しないように注意が必要です。 敵の砲撃により全滅させられないようにしましょう。 ●対戦車砲の体力バーは砲の耐久力では無く、砲手の体力を示しています 戦闘毎に工兵で対戦車砲を修理するようにしましょう。 修理する事で戦車の砲撃をより食い止める事が出来ます。 ●常に後方に配置するようにします 対戦車砲の射程距離はかなり長いです。このアドバンテージを活かしましょう。 常に自戦力の後方へ待機させるように心がけましょう。 基本Tips #21:Reload Times(リロード時間) 元記事 http //www.gamereplays.org/community/index.php?showtopic=151922 全てのユニットは移動している間は厳しいペナルティ(命中率の補正)を受けます。 発砲している間は静止するのも良い手段です。 しかし全ての車両は砲弾のリロード時間が存在します。 戦車で一般的に6~7秒くらいの時間です。 そこでこのリロード時間の間、より有利な場所へ移動させ、次の砲撃までに停止するようにします。 高価で重要な戦車を倒されにくくする方法です。 基本Tips #22:バンカーの守備 BunkerかMGNestにユニットを駐留させれば、あらゆる側面から建物への攻撃を防ぐ、素晴らしい効果を上げるでしょう。 これらの建物に駐留したユニットは、敵の攻撃に対して大きな耐性を得ることができます。 Sniperの狙撃にも幾度となく耐え、Grenadeの投擲すら大きな効果を上げることは出来ません。 Heavy Machine Gun Teamを駐留させれば、装甲部隊やMortarによる攻撃を除く、ほぼ全ての攻撃から安全だと保障されます。 しかも、Heavy Machine Gun Teamのコストのみで済むので、これは大変安価な作戦です。 資源を無駄にせずに済むことも第一に、これはBunkerを防衛している他の部隊を別のことに動かす余裕ができ、 必要ならば、Bunkerに補助的なアップグレードを施すことも出来るからです。 General Tip #23 - Dancing [10/29/2006] Oftentimes an MG squad will just barely beat your Riflemen/Volks into a building, soon to unleash hell on your troops. There is a counter, however, that enables your infantry to deal with the garrisoned MG. Simply dance or strafe the building from one side to the other, back and forth, continuously and never standing still. The main MG dude will constanly change windows to fire at your squad but, due to the deploy and redeploy times, actually never get a shot off. This way, your infantry squad will wear the MG squad down and kill it, or force it to ungarrison and retreat. With a little practice, you can thus reverse the entire situation of the classic Garrisoned MG ™. By Gnug315 General Tip #24 - Grenades vs Garrisoned Troops [10/30/2006] When using a grenade on a garrisoned mg42, try to get the mg42 firing out of one of the shorter sides of the house. This will cause the mg42 team inside to get closer together, and in most cases allow your grenade to kill the entire team. By Bentguru General Tip #25 - Backing Up [10/31/2006] A completely crucial part of tank warfare is backing up and away from danger while keeping your protective front armor, as well as your turret, facing your enemy. Tanks are quite maneuverable this way too, being able to make just as sharp turns backing up as when going forward. Do this by clicking a short length behind your tank, and if needed, shift-queue and entire escape route away from the battle, dodging obstacles et al and providing the speediest, safest retreat possible. The only vehicle that can t do this, in fact, is the Axis Motorcycle. By Gnug315 General Tip #26 - Know Your Enemy! [11/1/2006] Ever wish you could figure out who you are going up against when the match starts? Well, now you can! When you have a few seconds of free time in the beginning of a match, hit ctrl + shift + ~ on your keyboard and it will bring up the console. Search a bit and you will find your opponents name. At first it may be hard to spot amongst all the other words, but if he lags it will say it 4-5 times between some [ ]. Usually you can find it about halfway down the console page. Now you can know who you re fighting without waiting to see one of his units! By Lewclan General Tip #27 - Kiting [11/2/2006] Kiting is a term used when a vehicle seemingly attaches itself to an enemy squad by an invisible thread, usuing it s superior range to deal out damage whilst staying outside sticky-bomb or bazooka range. It requires studious micro, but can effectively completely counter any number of enemy squads. Simply keep your vehicle at the correct length, advancing and backing up as needed while unleashing a constant stream of salvos at your target. Your enemy will be forced to deal with your unit with other means. It is most commonly seen with Jeeps vs Pioneers, Pumas vs Riflemen w/ stickies, and Ostwinds vs Rangers, but also goes for the slower, more lumbersome tanks. By Gnug315 General Tip #28 - Killing Snipers [11/4/2006] If you spot a sniper, and don t have a jeep/bike then don t be afraid of charging it with e.g. riflemen. All units are able to detect the sniper, if you are close enough. Even a squad of pioneers are able to take out a sniper if you are lucky enough. So if you see a unsupported sniper starts shooting at your riflemen, press space (go to last event), trace the "smoke tail" and move your riflemen towards the direction of the "smoke tail". Then either use a Jeep/Motorcycle to detect the Sniper or charge it with your infantry. Goodbye, Sniper. By decon General Tip #29 - Hiding [11/6/2006] Hiding is an important part of warfare. As Sun Tzu states, when badly outnumbered, avoid the enemy entirely. In CoH, hiding can be used effectively against your enemy for example when you have decapped an opponent s point, but know he has dispatched troops to deal with you. Instead of trying to cap the point too, in the middle of enemy territory, run off with your units and hide in the corner. You will see that your enemy has defended the point when it starts blinking again as he captures it. Then, when he has done so, and most likely moved on, return your sneaky little squad to the point and decap it once again. Prime examples would include the two corner medium munition points on Semois, but almost all can be used like this in some way or the other. By Gnug315 General Tip #30 - One Way Door [11/7/2006] Barbed wire plays a crucial role in CoH, used to prevent enemy access to critical areas or thru chokepoints. There s a little detail you might not be aware of, tho because you can delete your own barbed wire at any time (simply select it and hit the delete key), it really acts as a one-way door. This is why you ll occasionally see good players wire off the same chokepoint; if the passage is already blocked to the second player, he might as well deny the first one this luxury. By Gnug315 General Tip #31 - Control Groups [11/9/2006] If you have decent amount of soldiers, group them together by select the units you want, then press "Ctrl" + a number. ex. Ctrl + 1 for Riflemen Ctrl + 2 for HMGs Ctrl + 3 for supportive infantry etc. This will prevent you from getting panic when your enemy surprise attack you, you can fight back instantly by these short cut numbers. Also, although this feature is comfy, don just select them and fight because they tend to stick together(BIG target for rockets/bombs), u have to micro them to take hard cover as many as possible. By total90 General Tip #32 - Garrisoned Snipers [11/10/2006] Garrisoned Snipers have a number of advantages over ungarrisoned Snipers. They fire more quickly, inflicting the same amount of damage, and are basically immune to infantry charges. However, a lone Sniper in a building is a sitting duck for an enemy Sniper -- they can be killed in one hit. Use this to your advantage if you see a Garrisoned enemy Sniper as well. It is bets to Garrison a Sniper with another unit, be it an Engineer squad or a Heavy Machine Gun team. The enemy Sniper trying to get yours will hit the other unit in the building and yours will be free to snipe his in one shot. By Moony General Tip #33 - Riflemen vs Garrisoned MG s [11/13/2006] 2 Riflemen Sqd 1 Garrisoned HMG (No Grenades) Try this on semois. If the axis player garrisons a HMG in a building, take one rifleman squad and place it in a nearby building to take their fire. Once he s shooting at the first squad, move the 2nd squad in. Unless you approach from the same vector as the 1st squad (please don t, that s just silly) they won t get suppressed. This 2nd squad can walk right up to the garrisoned building and just shoot the crap outta the MG squad. The MG squad cannot change targets, they will keep on shooting at the rifler squad in the building. It s rather silly, but I ve had it done to me and I ve done it to others. By th15 General Tip #34 - Destroying Hedgerows [11/14/2006] Mid-game and with no unit to push through hedgerows, break out the mines. Place a mine or two (usually needs two) real close to or even under a piece of heavy hedgerow, step back and lob a grenade or have a stug shot at the mines. A new front has just been opened for attack for your armor and infantry. For less than 100 munitions it s possible to bypass nasty chokepoints, flank them, and catch them with their pants down. By tnx3 General Tip #35 - Tactical Map [11/27/2006] Using tactical map to track enemy movement, when you bring up the tactical map, you see all the points thats not in LOS in gray, when you select a unit. and hover your mouse over the points, you will see 1 of 2 things 1. the pointer will change to the capping icon, the white circle with a tail like thing 2. no change Translations 1. the point if not being capped 2. enemy is capping that point Scan the map early on will let you get a grip where your enemy is heading to and how many units he might have The tactical map also tell you which points are OPed without having to scout it out. if you see a high fuel point giving +26, you know its OPed and its best to bring a flamer if you wish to destory it Normal - OPed High 16 - 26 Med 10 - 18 Low 5 - 8 By Sturmtruppen General Tip #36 - Attack Ground [01/01/2007] Why is there an attack ground option? Well there are many uses, to destroy unmanned AT guns to gain experience and deny the enemy a free AT gun. Do destroy any hidden units or mines that you think might be somewhere but just can t see it. Another good use is to use it to purposely miss when the Allies have War Machine on. That way if you can soak up some damage you can just shoot the ground until the power is over. Also if you see a Tiger/Tiger Ace that has no guns and damaged engine just ignore it. Remember they can only get 1 Tiger Ace and 2 Tigers. If you leave it alone that will buy you time before he destory/repair that on and get another Tiger. By Neubine General Tip #37 - Pioneers vs Engineers [01/15/2007] Pioneers HP 140 Build Time 14 Build Manpower 120 Engineers HP 165 Build Time 21 Build Manpower 140 Now, I’m an axis player and I hear many complaints from other Axis players about the inability of Pioneers to compete in a fight with Engineers, but the HP difference is only 25, so if at all possible put your Pioneers in cover (even light) and they will stand a good chance of coming out victorious. Another bonus of Pioneers is that they build so quickly you are able to have more out quicker, early game, compared to engineers, giving you a short (but sometimes) helpful advantage rushing to a certain strategic point, or barb wiring off an area, while your first Pioneer builds you base. (Or vice versa, take your starting Pioneer and rush and your built one will begin constructing your Wehrmacht Quarters before the allies built Engineer would start building a barracks) One last bonus of Pioneers is the free wire cutters at tier 2, which you can have within the first 5 min of a game while allied engineers seem to never take time to upgrade wire cutters for 50 munitions. The main advantage of the Engineer is that it has the obvious 3 man squad, allowing you to overcome the pitiful 2 man Pioneers if you charge. This also aids in the survivability of a squad against Axis snipers therefore allowing you to rush one and kill him if lucky as well as providing a greater chance of preserving the upgrades (be it flamethrower or mine sweeper) of that squad. by BroVVn General Tip #38 - Medic Bunkers [01/22/2007] In 1vs1 games you rarley see medic bunkers being used, this is problably because people tend to overlook their usefulness. As long as you get casaulties (not deaths) from fighting, the medics will run over there, picking up the injured carrying them back to the bunker. Once they ve gathered enough injured you will get a new squad. Axis spawns a grenadier unit. Allies spawns a riflemen unit. build the bunker close to the fighting, this way you will get your new unit deployed in the middle of the battle. If you also combine this with Axis defensive doctrine you can reinforce any casualties sustained if you move your squad close to the bunker, much like a forward barracks. Just build your bunker in cover to make sure it doesent take to many hits from the enemy player. you could also garrison a MG42 in the Axis bunker to make it an Mg nest that spawns troops. By Status Quo General Tip #39 - Evading with Sniper [02/05/2007] If you see an enemy engineer or pioneer squad rushing at your sniper-don t retreat! Instead shoot down one of the squad and then unactivate camouflage and run back. The sniper will be able to move back at either the same or greater speed than the enemy engineer squad, so you won t be taking much damage from their SMGs. Just be sure that you stay away from close combat with the enemy squad and you ll be fine. Once their squad gives up the chase-have your sniper shoot them in the back. This tip works best against Engineers and Pioneers because their weapons are only good at close range combat and they have a low number of squad members-don t try and use it against riflemen! By General Grant General Tip #40 - Tanks [02/12/2007] Knowing all the best things to do when using a tank can save many of them. Make the tank face threats. The front of every vehicle is the strongest spot. Sometimes shells will even bounce off the tiger s front armour. Sometimes facing all your tanks at once won t work because they are being attacked from more than one direction. In this case, command them individually or try moving them back a bit. This should reduce the amount of directions your tanks are being attacked from. If you re still being attacked from a lot of directions, make your tanks face the center vector of the attacks. You will force a lot of the attacks to hit the front of the vehicle instead of the side. Use the tanks reload times. I m pretty sure this has been said before but Every tank has a long reload time (Except for the Flakpanzer of course.) You can use this time to move your tank into a place where it can deal more damage to the enemy tanks. Make sure you tell your tank to face the enemy after you move it. If the enemy hasn t noticed, they won t turn their tanks toward you until you ve done a lot of damage. Halt your vehicle just before it shoots then move again. The next time they reload, try moving to the back of the tanks (If they haven t already turned.) Do not try to go to the back on the first move. DO NOT BUNCH UP. If you bunch up your tanks, they are extremely vulnerable to artillery and other explosive attacks. If you have to, move your tanks individually. It will save you a lot of fuel. Retreating. Your tanks are low on health and you want to get them out of the battle. DO NOT turn them around. Individually tell them to drive backwards away from the enemy. Much less damage will be done to them because the front of the tank is being hit. This can save a lot of tanks. It is also a good idea to get your mortar to fire smoke between the enemy and your tanks. Flanking. If you re having a tanks vs tanks battle with your enemy, and you re sending in another group of tanks, DO NOT send the tanks to the same place your other tanks are. Send them to the opposite side of the tanks. You will do much more damage to the enemy, and they won t be able to "Face You" because you have tanks on both sides. If there is any AT, tell the new group of tanks to kill it first. Get close. If you don t have any time of weapon to "launch" on the enemy tanks in battle, but they do, make sure you get your tanks as close as possible to the enemy without allowing them to get behind you. They are much less likely to attack you with artillery. If they do, the artillery will probably be farther away from you than usual, because they don t want to damage themselves at all. By EarthHunter General Tip #41 - Cover [02/18/2007] Cover has many uses and is not simply something you stick your troops into when in a battle. If you know you have lost a skirmish and all you have left to do is retreat your squad, you may want to manuever them a few steps left or right so that their direct line to your HQ contains some cover. Retreating units already have a huge armor bonus, and when this is added to medium and high cover, the unit is almost invincible. This can prevent you from losing your squads while retreating. Also, if your unit is on a road (like the one in the middle of Angoville) try to avoid retreating them on the road because they will have negative cover - meaning their retreat armor bonus is severly decreased. Also, if you are charging another unit with your own, I. E. riflemen charge unupgraded volks, or mp40 d volks charge riflemen, etc, instead of simply beelining towards them over open ground, check to see if there is a line of bushes or a wall that you can run through to get to them. This way you decrease the odds of you losing too many men before you reach an advantageous distance from your enemy. If you have to charge an enemy across a road, try to stay on the sides of the road, most of the roads have ditches which are yellow or medium cover. Finally, cover can really buff otherwise weak units and give them a decisive advantage over the enemy. I m not just talking about sticking regular infantry in there, stick some pioneers in a bush with your mg and riflemen that try to flank and then run up close may find the nasty suprise of 4 mp40 s firing back. Also, when you are defending a postion, you can have your troops in your selected cover, and then use your tanks to run over bushes, walls, fences, etc, so that when the enemy does attack, he ll realize that there is no cover except yours! All in all, remember that cover is a major part of Company of Heroes and that it has equal significance in the early, middle, and late game. Remember that nearly everything in this game is cover - for example, sneak your infantry behind their lines, kill the AT guns and then use the unmanned AT gun as green or high cover! By Lewclan. General Tip #42 - Roadways [03/12/2007] Roadways are a terrain feature that is present in all 3 of the 1v1 maps. When vehicles traverse the map on a road they get a very significant speed bonus that makes traveling to a destination much less difficult. Though not confirmed I would say the speed bonus is about 1.5x their normal speed, making it worthwhile if you can. One of the dangers of road travel however is that your opponent may place mines on the roads, rendering it dangerous to travel on. A Mine Flail or a squad of Engineers with Minesweepers can make this a little less dangerous, and cost your opponent munitions while giving you a slight peace of mind. For the Axis, there are a couple benefits as well, mainly for StuGs. StuGs not only move faster on a road but they also TURN faster, making them able to keep up and shoot at circling Shermans, which is very handy in a tank battle. The same mine danger is present however, and you should be especially weary if you see M8s running around the battlefield. Here are some tactical map shots with the roadways marked with a red line Angoville Semois Sturzdorf So as you can see they are placed in very tactically viable positions on the map that are good for quick escapes or a speed boost in combat for any vehicle from jeeps and bikes to Pershings and Tigers. By Kleatus The Road Bonus Not only does the road impart a speed bonus to vehicles that travel down it, but it also imparts a "Turning Speed Bonus" to a StuG parked on it. (or any other tracked vehicle) A StuG on a road can keep up with a tank attempting to circle-strafe it and thus defend itself. By JohnHardtack General Tip #43 - Rally points from buildings [03/19/2007] This is a helpful feature from all buildings, you have the ability to send units where ever you want them as soon as they are built. Select the building and simply right click where you want them to go. You can set rally point to other units on the field so that any new unit will automatically go to where that unit is. Helpful with engineers to repair units. You can also set rally points to buildings that can be garrisoned and your units will automatically enter them and set up to attack when they arrive. Just be careful with this option and make sure no enemies beat you into the building you want to occupy. This is important throughout the game, always use this to start your troops moving in an appropriate direction instead of standing around in your base! Further, you can set the rally point from your HQ unto your first building and the first Engy/Pio who pops out will automatically start to help build! By hillhome General Tip #44 - Using Shift+Click [03/26/2007] Shift + Click is a method you can use to queue up orders for your units. This can be used in many different areas of the game and I list some ways of what this can be used for below. So say you are on Beaux Lowlands in the Allied normal starting position. You want your 2nd engineer in this game to go cap the strat point left of your base, the munitions in the lower left corner, and the fuel point right above that. Instead of trying to time your clicks so that you get back to the unit right when a point is capped do the following Click on your unit. Press down the shift key and hold it in. Click on the 3 points you want to capture with that unit (you can even do it from the tactical map!). Once all 3 are clicked let of the shift key and click off of that unit. It will then go about its ordered task to cap those points for you! This can also be used with the tactical map for even faster early capping order speed. Further, you can use the same thing, holding down shift and issuing orders to lay multiple different sections of wire, sandbags, mines or a mix of all three things! What will end up happening is that once you lay down a section you will need to right click, this will instantly bring up a new section attached to the one you just ordered to go in. Simply right click again to get out of that and move your mouse to what you want to wire/bag/mine next. Click or use the hotkeys for whichever wire/bag/mines you were working on building and put the next section where you want it to go. As soon as your unit is done with the first sections of wire/bag/mines it will move automatically to the next one until it dies or runs out of queued orders. Plus you can use this with your units to deliberately tell them where to go, say for instance you want to down by the river on the upper left side of Beaux to flank your enemy. This method allows you to do that instead of having those units charge towards the shallows like the normal pathing would tell them to do. Last, but not least, you can use this to help your tanks reverse and hide behind buildings. It is much easier to reverse and curve your reverse by using Shift + Click. Now go practice and learn new ways to use this method soldier! By hillhome To queue wire or mines, you have to know a little trick. Here is the key sequence to wire 2 seperate sections Say your first pio is busy building Wehrmacht Quarters in the South on Semois, and you want him to go wire the northwest pin, stopping your opponent from getting at that House and that hi-Ammo. While building, do this 1.Select the Pios 2.Click or use hotkey to "build defensive" 3.Click or use hotkey on "build wire" 4.HOLD SHIFT and left-click the hedges to start the wire 5.KEEP HOLDING SHIFT left-click to finish the wire 6.RIGHT-CLICK anywhere (this is the trick, this stops you from continuing to wire) 6a. insert It s a good idea to now HOLD SHIFT RIGHT CLICK them towards the next destination (this prevents them from funny pathing bugs and you can make sure you wind up on the correct side of the wire after you build it) 7.Click or use hotkey to "build defensive" again 8.Click "build wire" 9.HOLD DOWN SHIFT left-click to start the next wire location by the road 10.KEEP HOLDING SHIFT drag the wire into the little lake, left-click to finish the wire 11.RIGHT-CLICK to break the wiring pattern 12.Now HOLD SHIFT right-click to go cap the +16 ammo that you just secured! If you want to wire a box, you can just keep shift-left-clicking and draw the four points of the box. When you want to stop wiring and go on to something else, just right click anywhere. Same is true for mines. Building single mines in different locations is far more effective than stringing a line of mines (which all blow up at once and usually only do 1 mine s worth of damage). 1.Select the Pios 2.Click or use hotkey to "build defensive" 3.Click "build mines" 4.Left-click a location to start 5.Spin them to the perfect spot and left-click again to finish the mines 6.HOLD SHIFT right-click them to move to the next mining spot 7.Click "build defensive" 8.Click "build mines" 9.HOLD SHIFT left-click to place the mine 10.KEEP HOLDING SHIFT left-click again to finish the mine 11.Right-click anywhere to stop stringing mines 12.HOLD SHIFT right-click your Pios to some cover near by (never hang around your mines or you may get blown up by them) note whether or not you hold shift while clicking "build defensive" and "build mines" is unimportant By AmiPolizeiFunk General Tip #45 - Tabbing Units [04/02/2007] General Tip #46 - Camo-Counters [04/09/2007] General Tip #47 - Countering Barbed Wire [04/16/2007] General Tip #48 - Control Sectors [04/30/07] General Tip #49 - Unit/Resource Management [05/06/07] General Tip #50 - Selective Exiting [05/14/07] General Tip #51 - MG/Sniper Counter [28/05/07] General Tip #52 - The Dead Have Eyes [04/06/2007] General Tip #53 - Targetting in Large Scale Engagements [6/10/07] General Tip #54 - Overextending [7/02/07] General Tip #55 - Anti-spam [7/16/07] General Tip #56 - Early Game Tips [7/30/07] General Tip #57 - Advanced Mine Tactics [12/8/07] General Tip #58 - Pursuing and retreating [30/8/07]
https://w.atwiki.jp/bfgmatome/pages/430.html
ゲーム情報(登録されているタグ) ジャンル>パズル ジャンル>戦略系 ジャンル>頭の体操 製作会社>HandMade Game 製作会社>未確認 言語>英語 コメント欄へ移動 ゲーム配布ページ 英語 http //www.bigfishgames.com/download-games/3806/rooms-the-main-building/index.html 日本語 紹介文 Discover a 1930s throwback upon your arrival to Rooms, complete with city streets and a surreal Mansion. Bored with old puzzles, you`re given a new type of sliding puzzle as a birthday gift. Your goal is to reach the exit before it closes on each level and retrieve the four puzzle pieces. Are you wise enough to use the right object at exactly the right time? Mr. Book is the Rooms steward and your personal guide to escape the maze in Rooms The Main Building. Sliding Puzzle game Attractive levels Collect items to reveal the picture Get help at our Forums 画像 « » var ppvArray_0_7b6f46297bf76cb939b5e2f67a1c1f79 = new Array(); ppvArray_0_7b6f46297bf76cb939b5e2f67a1c1f79[0] = http //w.atwiki.jp/bfgmatome/?cmd=upload&act=open&page=Rooms%3A+The+Main+Building&file=en_rooms-the-main-building-screen1.jpg ; window.onload=function(){ ppvShow_0_7b6f46297bf76cb939b5e2f67a1c1f79(0); }; function ppvShow_0_7b6f46297bf76cb939b5e2f67a1c1f79(n){ if(!ppvArray_0_7b6f46297bf76cb939b5e2f67a1c1f79[n]){ alert( 画像がありません ); return; } ppv_0_7b6f46297bf76cb939b5e2f67a1c1f79$( ppv_img_0_7b6f46297bf76cb939b5e2f67a1c1f79 ).src=ppvArray_0_7b6f46297bf76cb939b5e2f67a1c1f79[n]; ppv_0_7b6f46297bf76cb939b5e2f67a1c1f79$( ppv_link_0_7b6f46297bf76cb939b5e2f67a1c1f79 ).href=ppvArray_0_7b6f46297bf76cb939b5e2f67a1c1f79[n]; ppv_0_7b6f46297bf76cb939b5e2f67a1c1f79$( ppv_prev_0_7b6f46297bf76cb939b5e2f67a1c1f79 ).href= javascript ppvShow_0_7b6f46297bf76cb939b5e2f67a1c1f79( +(n-1)+ ) ; ppv_0_7b6f46297bf76cb939b5e2f67a1c1f79$( ppv_next_0_7b6f46297bf76cb939b5e2f67a1c1f79 ).href= javascript ppvShow_0_7b6f46297bf76cb939b5e2f67a1c1f79( +(n+1)+ ) ; } function ppv_0_7b6f46297bf76cb939b5e2f67a1c1f79$(){ var elements = new Array(); for (var i = 0; i arguments.length; i++){ var element = arguments[i]; if (typeof element == string ) element = document.getElementById(element); if (arguments.length == 1) return element; elements.push(element); } return elements; } 備考 レス一覧 565 名前: 名無しさんの野望 [sage] 投稿日: 2010/08/16(月) 18 13 11 ID x3/5SpMN 英語サイト見たらRoomsとかあるのね これWiiとかDSで出てる奴じゃん 566 名前: 名無しさんの野望 [sage] 投稿日: 2010/08/16(月) 18 24 14 ID r8Oby/2k . 565 日替わりだったんで即ポチッたんだけど>Rooms なんだかバグっぽい動きが… おかげで解けない部屋があって先に進めない…orz 681 名前: 名無しさんの野望 [sage] 投稿日: 2011/02/04(金) 14 32 54 ID 6XtCw+K1 Rooms The Main Buildingをやってみた。 こういうひたすらパズル(?)みたいなの好き。 時間制限で、ゲームオーバーとか言われると燃えるw 4面あるみたいだから、一通りプレイするだけでも4時間くらい遊べるかな? 682 名前: 名無しさんの野望 [sage] 投稿日: 2011/02/04(金) 14 34 57 ID 6XtCw+K1 連投。 上のrooms http //game.watch.impress.co.jp/docs/news/20110127_423012.html ググったらこんなニュース出てきた。 巷では人気のゲームなのか? 684 名前: 名無しさんの野望 [sage] 投稿日: 2011/02/04(金) 19 25 05 ID VXbFJOFr . 681 . 682 rooms、年末にはまりまくってた。 とにかくひたすらスライドパズル!の合間にストーリーモードってのが バランスよくて、とても楽しかった。 日本語版が魚屋にないのでWii版の購入をただ今、検討中。 コメント 名前 コメント トップページに戻る
https://w.atwiki.jp/imperionjp/pages/29.html
現在このページは工事中です 民間関係(Civil buildings) +Research facility Research facility 効果:研究開発をする 詳細:さまざまな施設や船を開発可能にしたり基本能力を底上げする。 Research pointsはここでしか稼げないので優先的に拡張すると良い。 Engineering(土木開発) Building lots 施設設置場所を1箇所追加する Building stability 施設の基本防御力を20%上昇させる Geologic exploration 採取地を1箇所追加する Storage capacity 各倉庫の容量を10%上昇させる 研究名 unlock 1 2 3 4 5 6 7 8 9 10 Building lots - 295 440 650 1000 Building stability - 75 Geologic exploration - 650 1000 - - - Storage capacity - 65 Planetary Defense(防衛システム開発) Repair quota 防衛システムの回復量(基本30%)を5%上昇させる Concealment capacity 隠し倉庫の容量を上昇させる Blueprint 設計図:指定されている防衛システムが製造可能になる 研究名 unlock 1 2 3 4 5 6 7 8 9 10 Repair quota - 50 Concealment capacity - 15 35 55 75 95 115 Blueprint Flak battery 10 - - - - - - - - - - Blueprint Puls laser 50 - - - - - - - - - - Blueprint Gauss gun 200 - - - - - - - - - - Blueprint Interval artillery 700 - - - - - - - - - - Blueprint Tachyon emitter 1500 - - - - - - - - - - Blueprint Defense Missile 1 50 - - - - - - - - - - Blueprint Defense Missile 2 300 - - - - - - - - - - Blueprint Bionic Missile 300 - - - - - - - - - - Military Space Travel(軍事開発) Propulsion technology 移動速度を10%上昇させる(太陽系内の移動は適用外) Fuel consumption 隠し倉庫の容量を上昇させる Cargo capacity 資源積載量を5%上昇させる Tank capacity 航続距離を座標1マス分延長する Blueprint 設計図:指定されている戦闘機・ミサイルが製造可能になる 研究名 unlock 1 2 3 4 5 6 7 8 9 10 Propulsion technology - 170 Fuel consumption - 180 Cargo capacity - 90 Tank capacity - 60 85 Blueprint Fighter - - - - - - - - - - Blueprint Battleship 500 - - - - - - - - - - Blueprint Destroyer 550 - - - - - - - - - - Blueprint Heavy Cruiser 8000 - - - - - - - - - - Blueprint Pulsar 7500 - - - - - - - - - - Blueprint Bomber 5000 - - - - - - - - - - Blueprint Attack Missile 1 100 - - - - - - - - - - Blueprint Attack Missile 2 300 - - - - - - - - - - Blueprint Attack Missile 3 1000 - - - - - - - - - - Blueprint Attack Missile 4 3000 - - - - - - - - - - Blueprint Bionic Blast 500 - - - - - - - - - - Civilian Space Travel(民間開発) Recycling 隕石での資源回収時間を半分にする(回収準備時間10分は適用外)/解体回収率を5%上昇させる Worm hole physics 銀河間の移動時間を1時間短縮させる Expansion studies Expansion pointsを(消費research points x 5)増やす Propulsion technology 移動速度を10%上昇させる(太陽系内の移動は適用外) Fuel consumption 隠し倉庫の容量を上昇させる Cargo capacity 資源積載量を5%上昇させる Trade 市場の積載量を20%上昇させる Espionage スパイ能力上昇(Lv1:艦隊数/Lv2:資源量/Lv3:防衛システム/Lv4:研究レベル/Lv5:施設レベル)/隠匿率上昇 Tank capacity 航続距離を座標1マス分延長する Blueprint 設計図:指定されている民間機・ミサイルが製造可能になる 研究名 unlock 1 2 3 4 5 6 7 8 9 10 Recycling - 50 100 200 400 800 Worm hole physics 400 - - - - - - - - - - Expansion studies - 250 Propulsion technology - 75 Fuel consumption - 100 140 Cargo capacity - 100 Trade - 85 Espionage - 150 210 295 Tank capacity - 55 80 Blueprint Probe 220 - - - - - - - - - - Blueprint Tanker 250 - - - - - - - - - - Blueprint Small transporter - - - - - - - - - - Blueprint Large transporter 1200 - - - - - - - - - - Blueprint Recycler - - - - - - - - - - Blueprint Drop ship 400 - - - - - - - - - - Energy technology(エネルギー開発) 各種使用許可/発電量を20%上昇させる 研究名 unlock 1 2 3 4 5 6 7 8 9 10 AEC energy - 70 100 Fusion power 1000 Solar power 100 105 155 Hydropower 300 100 Wind power - 110 165 250 Level EP RP Main RP Sub 1 625 745 1030 0 05 00 20 1 30 10 2 843 1005 1390 0 12 30 26 1 36 12 3 1139 1357 1877 0 21 15 33 1 42 14 4 1537 1832 2534 0 31 53 41 2 48 16 5 2075 2474 3421 0 45 19 50 2 54 18 6 2802 3340 4618 1 02 58 62 2 60 20 7 3783 4509 6235 1 26 57 75 3 66 22 8 5107 6088 8417 2 00 26 91 4 72 24 9 6895 8219 11363 2 48 09 110 4 78 26 10 9308 11095 15340 3 57 13 133 5 84 28 11 12566 14979 20709 5 38 20 161 6 90 30 12 16964 20222 27958 8 07 29 195 7 96 32 13 22902 27299 37743 11 48 44 235 9 102 34 14 30918 36854 50953 17 18 06 285 11 108 36 15 41740 49754 68787 25 29 39 345 13 114 38 16 56349 67168 92863 37 44 28 417 15 120 40 17 76071 90676 125365 56 04 12 506 18 126 42 18 102696 122413 169243 83 31 18 613 22 132 44 19 138639 165258 228478 124 39 28 744 27 138 46 20 187163 223099 308445 186 19 11 903 32 150 50 +Embassy Embassy 効果:Leagueの最大人数を増やす 建設条件:施設 Building yard level 3 詳細:1Lvで既存Leagueの参加が可能。 3Lvで新規Leagueの設立が可能。 現在のExpansion pointsが確認可能。 Level EP 人数 1 640 520 840 0 22 13 11 5 3 2 864 702 1134 0 33 26 15 6 6 3 1166 947 1530 0 46 24 19 7 9 4 1574 1279 2066 1 01 36 24 9 12 5 2125 1727 2790 1 19 38 30 10 15 6 2869 2331 3766 1 41 20 37 12 18 7 3874 3147 5084 2 07 43 45 15 21 8 5230 4249 6864 2 40 04 55 18 24 9 7060 5736 9267 3 20 05 66 21 27 10 9531 7744 12510 4 09 55 79 26 30 11 12868 10455 16889 5 12 17 95 31 33 12 17372 14114 22800 6 30 44 115 37 36 13 23452 19054 30781 8 09 44 138 45 39 14 31660 25724 41554 10 15 03 165 53 42 15 42741 34727 56098 12 54 04 199 64 45 16 57701 46882 75733 16 16 13 240 77 48 17 77896 63291 102239 20 33 33 289 92 51 18 105160 85443 138023 26 01 33 349 111 54 19 141967 115348 186331 32 59 59 421 133 57 20 191655 155720 251548 41 54 11 510 160 60 +Building yard Building yard 効果:建設時間を短縮する 詳細:10Lvで惑星内の不要な施設を破壊可能になる。 大抵の施設の建設条件になるため早期建築が必要。 Level EP 時間% 1 365 220 195 0 23 20 7 2 100 2 467 281 249 0 34 52 10 2 92 3 598 360 319 0 48 14 13 3 84 4 765 461 408 1 03 56 17 3 76 5 979 590 523 1 22 38 22 4 71 6 1254 755 670 1 45 10 26 5 66 7 1605 967 857 2 12 37 32 6 60 8 2054 1238 1097 2 46 21 39 7 55 9 2630 1585 1405 3 28 08 46 9 51 10 3366 2029 1798 4 20 13 55 10 47 11 4309 2597 2302 5 25 28 66 12 43 12 5515 3324 2946 6 47 36 79 15 39 13 7060 4255 3771 8 31 20 94 18 36 14 9036 5446 4827 10 42 42 112 21 33 15 11567 6972 6179 13 29 28 134 26 31 16 14806 8924 7910 17 01 31 161 31 28 17 18951 11423 10124 21 31 32 193 37 26 18 24258 14621 12959 27 15 46 231 44 24 19 31050 18715 16588 34 34 59 278 53 22 20 39744 23955 21233 43 55 47 335 64 20 +Civilian shipyard Civilian shipyard 効果:民間船を建造する 建設条件:施設 Fleet base level 1 建設条件:施設 Building yard level 1 詳細:非戦闘の船を作る施設。 Level EP 時間% 1 865 960 575 0 26 40 15 3 100 2 1107 1228 736 0 39 08 20 4 95 3 1417 1572 942 0 53 41 25 4 90 4 1814 2013 1205 1 10 55 32 5 85 5 2321 2576 1543 1 31 35 39 6 80 6 2972 3298 1975 1 56 38 48 7 75 7 3804 4222 2528 2 27 17 58 9 70 8 4869 5404 3236 3 05 07 71 11 65 9 6232 6917 4143 3 52 09 86 13 60 10 7978 8854 5303 4 50 57 103 15 55 11 10212 11333 6788 6 04 49 125 19 50 12 13071 14507 8689 7 37 59 150 22 45 13 16731 18569 11122 9 35 49 181 27 40 14 21416 23768 14236 12 05 14 218 32 35 15 27412 30423 18222 15 15 06 264 39 30 16 35088 38942 23324 19 16 44 319 46 25 17 44913 49846 29855 24 24 37 385 55 20 18 57489 63802 38215 30 57 18 466 67 19 73586 81667 48915 39 18 33 565 80 20 94190 104534 62611 49 58 45 685 96 +Colonization center Colonization center 効果:移民船を建造する 建設条件:施設 Embassy level 5 詳細:新しい惑星に移住するための船を作る施設。 やたら獲得Expansion pointsが高い。 Level EP 時間% 1 1550 1900 1550 0 55 33 18 15 100 2 1984 2432 1984 1 16 06 23 18 95 3 2539 3112 2539 1 41 01 30 22 90 4 3250 3984 3250 2 11 30 37 26 85 5 4160 5100 4160 2 49 07 46 31 80 6 5325 6528 5325 3 35 52 56 37 75 7 6816 8356 6816 4 34 19 68 45 70 8 8725 10696 8725 5 47 43 83 54 65 9 11168 13690 11168 7 20 17 100 64 60 10 14296 17524 14296 9 17 21 121 77 55 11 18299 22431 18299 11 45 49 146 93 50 12 23422 28711 23422 14 54 27 177 111 45 13 29981 36751 29981 18 54 30 214 134 40 14 38376 47041 38376 24 00 21 258 160 35 15 49121 60213 49121 30 30 27 312 193 30 16 62875 77073 62875 38 48 23 378 231 17 80480 98653 80480 49 24 19 458 277 18 103015 126276 103015 62 56 56 554 333 19 131859 161634 131859 80 15 40 672 399 20 168780 206891 168780 102 23 52 816 479 +Recycling yard Recycling yard 効果:廃棄物の一部返還・デブリの発見 建設条件:施設 Building yard level 5 詳細:不要なユニットを資源に変えたり範囲内のデブリを発見する。 Level EP 最大量 自動回収率 サーチ範囲 1 1470 1085 945 0 38 20 15 2 10000 11% 3 2 1837 1356 1181 0 54 04 20 2 14000 12% 4 3 2296 1695 1476 1 12 48 25 3 20000 13% 4 4 2871 2119 1845 1 35 23 32 3 27000 14% 5 5 3588 2648 2307 2 02 54 39 4 38000 15% 5 6 4486 3311 2883 2 36 43 48 5 54000 16% 6 7 5607 4138 3604 3 18 36 58 6 75000 17% 6 8 7009 5173 4506 4 10 48 71 7 106000 18% 7 9 8761 6467 5632 5 16 13 86 9 150000 19% 7 10 10952 8083 7040 6 38 34 103 10 210000 20% 8 11 13690 10104 8800 8 22 34 125 12 300000 21% 8 12 17113 12631 11001 10 34 17 150 15 400000 22% 9 13 21391 15788 13751 13 21 28 181 18 570000 23% 9 14 26739 19736 17189 16 54 05 218 21 800000 24% 10 15 33423 24670 21486 21 24 50 264 26 1100000 25% 16 41779 30837 26858 27 09 59 319 31 1500000 26% 17 52224 38546 33573 34 30 23 385 37 2100000 27% 18 65281 48183 41966 43 52 41 466 44 3000000 28% 19 81601 60229 52458 55 51 02 565 53 4300000 29% 20 102001 75286 65572 71 09 08 685 64 ∞ 30% +Resource cache Resource cache 効果:隠し倉庫の最大所持量を増やす 詳細:攻められたときに資源を奪われないための施設。 10Lvにすることで2箇所目の建設が可能。 Level EP 各隠蔽量 1 150 125 125 0 10 00 5 1 500 2 192 160 160 0 17 48 8 1 850 3 245 204 204 0 26 23 10 1 1200 4 314 262 262 0 35 58 14 2 1700 5 402 335 335 0 46 51 17 2 2200 6 515 429 429 0 59 22 21 2 2600 7 659 549 549 1 13 59 25 3 3200 8 844 703 703 1 31 18 31 4 3800 9 1080 900 900 1 52 03 37 4 4400 10 1383 1152 1152 2 17 14 43 5 5000 +Trade center Trade center 効果:市場を使用できる 建設条件:施設 Research facility level 1 詳細:他人と資源のトレードが可能。 Titanとは重水素の交換ができない。 Terran/Xenとの制限はない。 Level EP 台数 1 285 625 390 0 10 00 9 4 1 2 364 800 499 0 22 48 12 5 2 3 466 1024 638 0 36 23 16 6 3 4 597 1310 817 0 50 58 21 7 4 5 765 1677 1046 1 06 51 26 8 5 6 979 2147 1340 1 24 22 32 10 6 7 1253 2748 1715 1 43 59 39 12 7 8 1604 3518 2195 2 06 18 47 14 8 9 2053 4503 2810 2 32 03 56 17 9 10 2628 5764 3597 3 02 14 67 21 10 11 3364 7378 4604 3 38 04 81 25 11 12 4306 9444 5893 4 21 07 97 30 12 13 5512 12089 7543 5 13 26 116 36 13 14 7056 15474 9655 6 17 35 139 43 14 15 9032 19807 12359 7 36 55 167 51 15 16 11560 25353 15820 9 15 39 200 62 16 17 14798 32451 20249 11 19 14 241 74 17 18 18941 41538 25919 13 54 37 290 89 18 19 24245 53169 33177 17 10 42 350 106 19 20 31033 68056 42467 21 18 54 422 128 20 +Robot factory Robot factory 効果:船・ロケット・防衛システムの製造時間短縮 建設条件:施設 Shipyard level 10 建設条件:施設 Civilian shipyard level 10 詳細:製造時間をさらに短縮させる。 製造時間=製造対象*各施設の短縮率*工場の短縮率 Level EP 時間% 1 3995 3485 1020 1 33 20 40 2 97.5 2 5113 4460 1305 2 04 28 50 2 95 3 6545 5709 1671 2 42 55 63 3 92.5 4 8378 7308 2139 3 30 44 77 3 90 5 10723 9354 2738 4 30 32 95 4 87.5 6 13726 11974 3504 5 45 41 116 5 85 7 17570 15327 4486 7 20 29 141 6 82.5 8 22489 19618 5742 9 20 25 171 7 80 9 28787 25112 7349 11 52 32 208 9 77.5 10 36847 32143 9407 15 05 51 253 10 75 11 47164 41143 12042 19 11 53 307 12 72.5 12 60370 52663 15413 24 25 25 373 15 70 13 77274 67409 19729 31 05 20 453 18 14 98911 86284 25253 39 35 49 550 21 15 126606 110444 32325 50 27 51 668 26 16 162056 141368 41376 64 21 03 812 31 17 207432 180951 52961 82 06 09 987 37 18 265513 231617 67790 104 48 04 1201 44 19 339857 296471 86772 133 49 55 1461 53 20 435016 379482 111068 170 58 06 1778 64
https://w.atwiki.jp/bbc_mc/pages/30.html
Github jenkins buildsystem 勝手な和訳 以下のページの個人的和訳です。 http //www.minecraftforge.net/wiki/Github_%26_jenkins_buildsystem 現在、翻訳中です。(2013/09/13) そのため、まだ以下の手順を実際に試してません。。。 なるたけ原文(英文)を併記しますので、意味不明・曖昧な場合は参照下さい。 目次 How-To GitHub と Jenkins Modding 環境の準備 / Preparing your modding environment a) 開発環境PCに必要なプログラム / Programs needed on your PC (the modding machine) b) GitHub のセットアップ / Setting up GitHub サーバーの準備 / Preparing your server a) サーバーに必要なプログラム / Programs needed on your server b) Jenkins の設定 / Setting up Jenkins c) Jenkins Job の設定 / Setting up a Jenkins job. d) Build 環境の設定 / set up the building environment 編集 How-To これは Minecraft Forge(もしくは関連するソフトウェア)の利用方法に関する、ハウツーガイド もしくはチュートリアルです。 このチュートリアルは完全ではありませんので、ご注意下さい! 編集 GitHub と Jenkins このチュートリアルでは、jenkins と github を使ったビルドシステムをどうやって作るか、を説明していきます。 状況によっていくらか違いがあるのですが、できる限りがんばります。 この方法はあなたのソースコードをインターネットに公開しますので、その結果誰かがあなたのコードをコピーして使っても私に怒らないでください。 この翻訳(和訳者註:英文)はオランダ語で書かれたものを翻訳したものですので、完全な翻訳となっているかは保証しかねる事をご承知ください。 In this tutorial I’m going to (try to) explain how to create a jenkins and github build system, this is different for each scenario, but I’ll do my best. This will put your source code on the internet, don’t be mad at me if someone copies it. Please note that is written on a Dutch system, not all translations might be 100% accurate. 事前準備: root 権限を持っている Linux サーバ(VPS のサーバでもおそらく動きます。ただし、あなたはそのサーバにソフトウェアをインストールできる必要があります。) Linux サーバは windows に比べて 200% くらいは速い、という事をあなたは知っておくべきかもしれません mod を作成するコンピュータ(windows ... ?) windows、と書きましたが、Linux や Mac でも構いません。但し、ここではそれらの環境特有の問題については述べません。 ここで windows と書いた理由は、GitHub for Windows(PCアプリ) のほうが、コマンドラインよりも簡単だからです。 Linux サーバへのファイルアクセス FTP や samba Needed for this A linux server with root access (a VPS might work, but you need to be able to install software) As you should know a linux server is like 200% faster than a windows equivalent.... A (windows) computer on which you mod. I say windows, but with some common sense and research you should be able to adapt to linux and mac too, but I don’t provide the instructions for that. The reason for this is primarily “GitHub for windows”. Basic command line experience. I’m not going to explain how to use the terminal. Easy file acsess to the servers file system ((s)FTP or samba file server is recommended) 編集 Modding 環境の準備 / Preparing your modding environment a) 開発環境PCに必要なプログラム / Programs needed on your PC (the modding machine) Github for Windows プログラムを作成するエディタ (Notepad++とか) コピー/ペースト機能付きのターミナルクライアント (PuTTYとか) Github for windows [2] A note making program (Notepad++) A terminal client that supports copy/paste (PuTTY) b) GitHub のセットアップ / Setting up GitHub 1."GitHub for Windows" を開く あなたのリポジトリをここに作成する事をお勧めしますが、どの位置に保存するかが重要です。 もしデータドライブ(和訳者註:C(システムドライブ)以外、の意味か)にするのであれば、以下のような構成がお勧めです。 D \modding\github\ModName 2.Mincraft の jar を取得(client / server) し、MCP と Forge をインストールする 3.あなたの mod を作成する あなたの mod を区分された package にしておく事で、元々の Minecraft や Forge のコードとあなたのコードの見分けが付きやすくなります。 4.Minecraft や Forge のコードは、あなたのリポジトリに入れてはいけません!!! ".gitignore" で指定する事で、リポジトリに登録されなくすることができます。 /bin/* /conf/* /docs/* /eclipse/* /forge/* /jars/* /lib/* /logs/* /modsrc/* /reobf/* /runtime/* /temp/* /src/minecraft/* /src/minecraft_server/* /src/common/* !/src/common/dries007/ !/src/common/mcmod.info !/src/common/SP.png *.bat *.sh Open github for windows. I recommend creating your repo here. The location you pick is important. If you have a data drive, I recommend this structure D \modding\github\ModName Now you download a fresh copy of Minecraft (both client and server) and install MCP and forge. Hint for easier modding If you use eclipse, make a shortcut to it in your mods folder and open the properties of the shortcut, and add “-data PathToEclipseFolder” to the target box so you get something like this “C \ProgramEXEs\eclipse\eclipse.exe -data C \Modding\GitHub\SimpleCore\eclipse” This will open Eclipse in the right folder and make your life easier if you use more then 1 project. Now you make your mod (or only a basic mod class so we can go on with the tutuorial ;-) ) Make the mod in a separate package so you can easily filter it out of the original Minecraft and Forge code. Original code (both MC and Forge) CAN’T be in your repo! That s where the .gitignore file comes in. Open it with your notepad. This is where you specify what doesn’t go in the repo, mine looks like this /bin/* /conf/* /docs/* /eclipse/* /forge/* /jars/* /lib/* /logs/* /modsrc/* /reobf/* /runtime/* /temp/* /src/minecraft/* /src/minecraft_server/* /src/common/* !/src/common/dries007/ !/src/common/mcmod.info !/src/common/SP.png *.bat *.sh 追加説明 ".gitignore" の記載は、リポジトリ登録時に無視するファイルのリストです。 "!" から始まる記載の場合、「無視対象から外す」意味となります。 基本的に、あなたの mod のファイル以外をすべて無視するように設定する必要があります。 あなたの mod が package で区分けされているのであれば、上位ディレクトリを無視した上で、mod 用ディレクトリを ! 付きで指定することができます。 そうでなければ。。。ファイルをひとつづつ指定するしかないかもしれませんね!グッドラック! Let me explain All the lines in here make an ignore rule. Except the ones that start with ! You basically need to tell github to ignore all files except your mod. If your mod is in a seperate package, you can do this by ignoring /src/common, except for /src/common/MOD. If you didn’t, well good luck specifying all the files separately. 編集 サーバーの準備 / Preparing your server a) サーバーに必要なプログラム / Programs needed on your server Jenkins (もし ubuntu を使うのであれば、以下をどうぞ http //pkg.jenkins-ci.org/debian/) Java / OpenSDK (http //openjdk.java.net/install/index.html ) Wine (Ubuntu http //www.winehq.org/download/ubuntu) Jenkins (If you use ubuntu http //pkg.jenkins-ci.org/debian/) Java / OpenSDK (http //openjdk.java.net/install/index.html ) Wine (Ubuntu http //www.winehq.org/download/ubuntu) 編集 b) Jenkins の設定 / Setting up Jenkins Linuxサーバの 8080 ポートへお好きなブラウザでアクセスしてください(Chrome(ium)お勧め) Jenkins の管理画面が見れたでしょうか?もし見えなければ、以下のコマンドで jenkins を開始して下さい。 "/etc/init.d/jenkins start" (管理画面が開いたら) "Manage Jenkins" を選択し、"Configure Global Security" の画面へ移動 以下の設定を確認 “Enable security” “Jenkins s own user database” “Allow users to sign up” 設定/変更を保存 ユーザーを作成してログインし、"Global Security" が下記の通りか確認 “Project-based Matrix Authorization Strategy” "In the table" あなたの求める通りのユーザーを作成してください(おそらく管理者?) ここで、追加するユーザーの名前は、すでに存在しておりアクセス可能であるべきです。 それ以外の場合、jenkins が影響を及ぼすことがあります 設定/変更を保存 やっと jenkins の設定を変更できます。 "manage" から "Plugin management" へ "Available" から "GitHub plugin" を選択 チェックボックスにチェックをつけ、“Download now and install after restart”ボタンを押下 ダウンロード画面で、"restart once no jobs are running" にチェック Jenkins の設定は完了 但し、まだ job は何も走っていない状態です。 Got to SERVERHOST 8080 in your favorite browser (should be chrome(ium)) This will give you the jenkins interface, if not, run “/etc/init.d/jenkins start” Hit “Manage Jenkins” and “Configure Global Security” Check the following options “Enable security” “Jenkins s own user database” “Allow users to sign up” Save. Now create a user and log in, then return to the global security section and check “Project-based Matrix Authorization Strategy” In the table Add a user you want to be (admin perhaps?) This should be a username that exists and you have access to (like the one you just created). Otherwise, jenkins will cheerfully and quickly cut off your ability to manage your own server. For anonymous "Read" in Overall For Admin(User you just added) Check it all! Save. Now only you can edit Jenkins settings. Now go to manage and then Plugin management. In the “Available” tab you look for “GitHub plugin” (Currently right at the bottom of "External Site/Tool Integrations") Click the check box, and hit “Download now and install after restart”. In the download screen, check “restart once no jobs are running” Now your jenkins is done, but no jobs are running just yet. 編集 c) Jenkins Job の設定 / Setting up a Jenkins job. Jenkins にログインし、"New Job" を押下 job に名称を登録し、1つ目のオプション "free-style software project" を選択 "Enable project-based security" にチェックを入れ、現在のユーザーを追加 "Anonymous" アカウントについては、Read/Workspace のみにチェック テキストボックス "Github Project" にて、Github 用のユーザーでアクセスするための URL を与える "buildの実行タイミング" については、"手動で指示がある場合のみ" を設定 あなたのユーザー名を入力 "ソースコード" セクションにて、Git を選択 Github の URL を入力 ( Git // みたいなやつ) "Github (のレポジトリ) に変更があった場合、ビルドする" を設定 ビルドステップのセクションで、"シェルスクリプトを実行" を追加 入力欄が開くので、以下のコマンドを登録 ここで入力したスクリプトは、この後 Github に変更を push するたびに実行されます rm -r builds mkdir builds python runtime/recompile.py python runtime/reobfuscate.py zip -r -9 $WORKSPACE/builds/SimpleCore_src_$BUILD_NUMBER src/common/dries007/* zip -r -9 $WORKSPACE/builds/SimpleCore_src_$BUILD_NUMBER src/common/mcmod.info zip -r -9 $WORKSPACE/builds/SimpleCore_src_$BUILD_NUMBER src/common/SP.png cd reobf/minecraft zip -r -D -9 $WORKSPACE/builds/SimpleCore_$BUILD_NUMBER * cd ../.. cd src/common zip -r -D -9 $WORKSPACE/builds/SimpleCore_$BUILD_NUMBER mcmod.info zip -r -D -9 $WORKSPACE/builds/SimpleCore_$BUILD_NUMBER SP.png cd ../.. In Jenkins, hit “New job”. Give a name and select the 1st option (Build a free-style software project) Now, you check “Enable project-based security” and add your user, In the table, check everything behind your user. Behind Anonymous you check Read and Workspace. In the textbox “Github Project” you can give a URL to forward the user to Github. Check “Promote builds when...”, “Only when manually approved”. In the box, put your username. In the source code section, select Git. In the box put the GitHub url (the Git // one) Check “Build when a change is pushed to GitHub”. In the building steps section Add a step “Execute a shell sript” This gives you a box. Ever time you push a change to GitHub this box will be executed. ここで、上記のスクリプトの内容を説明していきます。 rm -r builds 古いビルドを削除します。 mkdir builds 新しいビルドのため、ディレクトリを作成し直します。 python runtime/recompile.py python runtime/reobfuscate.py (わかるよね…?) (※翻訳者注 mcp に同梱されているスクリプトを実行し、recompile と reobfuscate します) zip -r -9 $WORKSPACE/builds/SimpleCore_src_$BUILD_NUMBER src/common/dries007/* zip -r -9 $WORKSPACE/builds/SimpleCore_src_$BUILD_NUMBER src/common/mcmod.info zip -r -9 $WORKSPACE/builds/SimpleCore_src_$BUILD_NUMBER src/common/SP.png ここで行っている事は OPTIONAL(しなくても良い) です。 あなたのコードもまた github にある場合、この工程は不要です。 この工程では mod のファイルをビルドフォルダ内の zip に含めています。 OPTIONAL (Your code is on github too, you don’t need this, but it copies the mod’s files to a zip in the builds folder) cd reobf/minecraft zip -r -D -9 $WORKSPACE/builds/SimpleCore_$BUILD_NUMBER * cd ../.. cd src/common zip -r -D -9 $WORKSPACE/builds/SimpleCore_$BUILD_NUMBER mcmod.info zip -r -D -9 $WORKSPACE/builds/SimpleCore_$BUILD_NUMBER SP.png cd ../.. この部分では、mod のコード(.javaではなく .class等)(と、mcmod.info やロゴファイル) を zip へ含めています。 "SimpleCore" と書いている部分は、あなたの mod 名に書き換えて下さい。 This part copies the actual mod code (And the mcmod.info and my logo) to a zip. You should replace the “SimpleCore” with your mods name. これらの作業結果が正しく動作するかどうかをテストするために、"Archiving the artifacts" という post-build action を追加します。 実行内容を記載する欄が表示されたら、以下を記入します。 builds/*.zip == builds/*.zip に関するエラーが表示されたとしても気にしないで下さい。 これは .zip フォルダがあなたの builds フォルダ内に無い事による警告表示であり、無視できます。 builds フォルダ内に .zip フォルダを配置することでこのエラーを回避できますが、どちらでもお好きな対策でかまいません。 Now we need to tell jenkins what the result of the hard work is by adding a post-build action “Archiving the artifacts” (? translation....) In the little box you put this “builds/*.zip” == If you get an error about “builds/*.zip” not meaning anything, it simply detects no .zip in your freshly made builds folder. You can make an empty .zip to evade that, but it doesn t matter. Now you have a configured job. Now you need to 編集 d) Build 環境の設定 / set up the building environment サーバへファイルを送受信する準備をして下さい。 /var/lib/jenkins/jobs フォルダへ移動します このフォルダにはあなたの mod 名のフォルダがあるはずです。このフォルダを開き、"workspace" という名前の新しいフォルダを作成して下さい。 このフォルダ内に、あなたの modding フォルダの中身を "完全に全て" コピーして下さい。(例 D \modding\github\ModName) workspace フォルダ内に builds フォルダがある事を必ず確認して下さい。(無い場合、ビルドが失敗します)。さて、お好きな飲み物を飲んできて下さい!コピーには時間がかかりますからね。 コピーが終わったら、コピーしたファイルへのアクセス権限を jenkins に与えて下さい。 ターミナルからだと、以下の様な感じでしょう。 “chmod 777 /var/lib/jenkins/jobs/ModName -R” forge や MC をアップデートする度に、上記の工程が必要となります。 jenkinsサーバと開発用PCで、forge や MC のバージョンを合わせておく必要があります。 さて、では build をテストしてみましょう。 手動でテストを行い、次に github との連携確認を行います。 手動で build を開始するには、jenkins の画面をブラウザで開いて job を選択し、"build now" ボタンを押下します。 結果を見るには、スタートさせた build の画面を開き、"コンソール" ボタンを押下します。 ログの末尾が「Finished SUCCESS」で終わっていれば OK です。 最後に、github へ変更を push して、この結果が幸運によらないものである事を確認したら、パーティへ出かけましょう! Open the way you send files back and forth with your server. Go (on the server) to /var/lib/jenkins/jobs/ In this folder there will be a folder with the name of your mod, open it and make a new folder here called “workspace”. In here you copy the entire(!) modding folder (D \modding\github\ModName) Make sure there is a builds folder in the workspace or your build WILL FAIL. Go get a coffie/wathever you like, this might take a while. If its done you need to give jenkins permission to edit these files, do this by executing this command in terminal “chmod 777 /var/lib/jenkins/jobs/ModName -R” Every time you update forge or MC this needs to happen, you need the same version of Forge and MC on your server and your PC. Now you can test a build (begin manually, after that do a test by pushing something in github) To manually start a build, go to jenkins (in browser) and click on your job, then hit “build now”. To see the result, go to the build you just started and hit “Console”. If your log ends with “Finished SUCCESS”, try again (with github) to make sure it wasn’t luck and then go and throw a party. 編集
https://w.atwiki.jp/banished/pages/139.html
■ゲームの概要 Gameplay Overview・住民 Citizens・資源 Resources・建物と建設 Buildings and Construction・災害 Disasters■ナビゲーションコントロール Navigation Controls .■メインツールバー Main Toolbar・シミュレーション速度 Simulation Speed■ツールとレポート Tools and Reports・ステータスバー Status Bar・イベントログ Event Log・エリアマップ Area Map・職業 Professions・資源の上限 Resource Limits・優先ツール Priority Tool・通勤経路ツール Path Tool・カメラの位置 Camera Locations・町の統計 Town Statistics・ヘルプ Help■生活の場と住宅 Home and Housing .・木造の家 Wooden Houses・石造りの家 Stone Houses・下宿 Boarding houses ■道路と橋 Roads and Bridges・未舗装の道 Dirt Roads・石畳の道 Stone Roads・橋 Bridges・トンネル Tunnels■保管、市場と交易 Storage, Markets & Trade・納屋 Strage barns・資材置場 Stock Piles・市場 Markets・交易所 Trading Posts■町のサービス Town Service・井戸 Wells・学校 Schools・病院 Hospitals・タウンホール(役場) Town Halls・チャペル(教会) Chapels・共同墓地 Cemeteries■食糧の生産 Food Production・畑 Crop Fields・果樹園 Orchards・放牧地 Pastures・釣り小屋 Fishing Docks・狩猟小屋 Hunting Cabin・採集小屋 Gatherers Huts ■資源生産 Resource Production .・薪割り Woodcutters・林業 Foresters・薬師 Herbalists・鍛冶屋 Blacksmiths・仕立屋 Tailors・酒場 Taverns・鉱業 Mines・採石場 Quarries■破壊と除去ツール Removing Structure・建物を破壊する Removing Structure・資源の除去(収集) Removing Resources・伐採 Harvesting Trees・石の収集 Collecting Stone・鉄の収集 Collecting Iron・道路を削除する Removing Roads・除去のキャンセル Canceling Removal■クレジット Credits 建物と建設 Buildings and Construction すべての建物は、メインツールバーの中からカテゴリを選択し、その後建物を選択することで建設されます。 例えば、Forester lodge(フォレスターロッジ、森の番人小屋)を建設するためには、 まずResource Production(リソースプロダクション、資源生産)のためのボタンを選び、 次いで森の番人小屋のボタンを選択することになります。 建物を選択後、土地に建物を配置することができます。 特に指定しない場合、RとTキーを使って建物を回転させることができます。 建物に付属する緑の矢印は建物の正面を指していて、建物がどこで道路に接続するかを示しています。 建物を配置することができないときは、緑のハイライトは赤くなります。 マウスを左クリックすると、建物が配置されます。 畑や道路のようないくつかの建造物は、サイズを変えることができます。 その場合は、配置したい場所をクリックし、ドラッグすることで配置できます。 いったん建物を配置すると、建築予定地が標されます。 建物を建設する前に、建設予定地上の障害物は撤去する必要があり、建物を建設するために仕事をする必要があります。 建設予定地をクリックすると、建設の進捗状況を表示します。 木材、石材、鉄の組み合わせは、建造物を建設するために必要とされるでしょう。 必要な資源は、地表から収集することができ、また、林業、鉱山、採石場とを用いて生産することもできます。 現時点で、町に必要な資源がなくても、建物を配置することはできます。 資源が利用可能になると、町の住民は建設に取り組み始めます。 工事中は、建物の作業を開始したり、停止したりすることを、一時停止ボタン(※黄色※)で切り替えることができます。 これは、建物を建設することなく、初期に建物の配置をレイアウトすることができます。 人々が必要な資源を持ち込んだら、建築家は、建物を建設するために必要とされます。 時間が経つにつれて、建設の進捗状況を見ることができます。 竣工後、建物を選択すると、その詳細が表示されます。 建物をコントロールするために使用できる、いくつかの共通要素があります。 すべての建物は、これらのコントロールボタンを持っています。 建物で働いている人数を示しています。働き手の最大数を増減することができます。この箇所のメイン部分をクリックすると、働き手の場所をフォーカスし選択します。 これは、(同様の)建物で働いている職業人全体の数を示しています。ここで増減するのと同じように、働き手の数はプロフェッション・ツール(職業ツール)でも変更できます。 生産開始ボタンでは、今期並びに前期生産された資源を表示します。 センターボタンは、建物を視界の中央にもってきます。 通常、詳細画面は、カメラが動いても選択した建物の上に留まります。詳細画面が屋上に留まらないように、ピン・ボタンはスクリーンに留め置きます。ウィンドウを動かせば自動的にピンで留められます。たとえ建物がスクリーンに映っていなくても、詳細画面はスクリーンに留まります。 詳細画面を閉じます。 建物の状況は、建物のステータス(もしあれば)を示します。 建物を配置したり、いくつかの建物をクリックすると、黄色の円が周囲の地面に表示されます。 これは、建物の有効エリアです。労働者はこのエリアで自分の仕事を行います。 同じ種類の建物の有効エリアを2つ重ねると、両方の建物の働き手が同じ土地を使用するので、双方の建物ともに資源生産量が低下することがあります。 有効エリア 何かが建物に悪影響を与えている場合、スターテスアイコンが建物上に現れます。 そして、建物の詳細画面にも同様に現れます。 この建物の建設は、中断されています。 この建物の仕事は、無効にされているか、実行できません。 この建物は、保管できる資源量の最大に達しています。 この建物は、必要な資源がないため、仕事を続けることができません。 この建物は、働き手がいません。 この建物は、取り壊し中か、アップグレード中です。 All Buildings are constructed by selecting a category and then a building using the main toolbar. For example, to build a foresters lodge you would first select the button for Resource Production and then the button for a forester lodge. After selecting the building, you can place in on the landscape. By default, you can rotate the building using the R and T keys. the green arrows on the building point to the front of the building, and show where the building may overlap a road. If a building cannot be placed, the green highlight will turn red. Clicking the left mouse button will place the building. Some placed items like crop fields and roads are variable sized. In this case you can click and drag over the landscape to place them. Once placed, a footprint will appear where the building has been placed. Before the building can be used, the area needs to be collected, and work needs to be done to erect the building. Clicking on the area where the building is placed will show build progress. A combination of Logs, Stone, and Iron may be needed to build a structure. The needed resource can be collected from the landscape, or they can be produced using foresters, mines, and quarries. You can place a building even if the town currently doesn t have the required resources. Once the resources become available, the townsfolk will continue working on it. During construction, you can toggle the pause button to start or stop work on the building. This allows for laying out the placement of buildings early without having to build them. Once the people have collected the needed resources, builders will be needed to construct the building. Over time you can see construction progress. After construction, selecting a building will display its details. There are several common elements that can be used to control a building. Not all buildings have all these controls. When you place or click on some buildings, a yellow circle will appear on the ground around the building. This is the area of effectiveness of the building. Workers will perform their work only in the area. Overlapping the circles of two of same type of building may result in lower resource production as workers from both buildings will be using the same land. If something is adversely affecting a building, a status icon will appear above the building, as well appearing on the building details.
https://w.atwiki.jp/sicpstudygroup/pages/14.html
Exercise1.1 gosh 10 10 gosh (+ 5 4 3) 12 gosh (- 9 1) 8 gosh (/ 6 2) 3 gosh (+ (* 2 4) (- 4 6)) 6 gosh (define a 3) a gosh (define b (+ a 1)) b gosh (+ a b (* a b)) 19 gosh (= a b) #f gosh (if (and ( b a) ( b (* a b))) ..... b ..... a) 4 gosh (cond ((= a 4) 6) ..... ((= b 4) (+ 6 7 a)) ..... (else 25)) 16 gosh (+ 2 (if ( b a) b a)) 6 gosh (* (cond (( a b) a) ..... (( a b) b) ..... (else -1)) ..... (+ a 1)) 16 by iwk Exercise1.2 gosh (/ (+ 5 4 (- 2 (- 3 (+ 6 (/ 4 5))))) ..... (* 3 (- 6 2) (- 2 7))) -0.24666666666666667 by iwk Exercise1.3 (define (func a b c) (if ( = a b) (+ (* a a) (if ( = b c) (* b b) (* c c))) (+ (* b b) (if ( = a c) (* a a) (* c c))))) 実行例 SC (func 1 2 3) 13 SC (func 2 2 3) 13 SC (func 2 2 2) 8 by Alyssa 別解(再帰呼び出しによる解答) (define (sum-square-largest x y z) (cond ((and ( x y) ( x z)) (+ (* y y) (* z z))) (else (sum-square-largest y z x)))) 以下参照URL http //lispuser.net/memo/lisp/2007-04-11-22-16.html by iriya Exercise1.4 (define (a-plus-abs-b a b) ((if ( b 0) + -) a b)) ;; b 0ならば,(+ a b)が評価され,そうでないなら(- a b)が評価される. ;; つまり,この手続きはaと,bの絶対値を足した値を返す. ;; このように基本演算子を,あたかもデータであるかのように返すことが可能なのである. 実行例 SC (a-plus-abs-b 1 -2) 3 SC (a-plus-abs-b 1 2) 3 by Alyssa Exercise1.5 (define (p) (p)) (define (test x y) (if (= x 0) 0 y)) ;; testは,自らが定義した手続きであるので,作用的順序(applicative order)の場合,test手続きに引数x,yを作用(apply)させる前に,引数x,yを評価する. ;; ゆえに,(test 0 (p))の評価において,(p)はそれ自身(p)と定義されているので,引数(p)の評価が終わらず,無限ループとなる. ;; 一方,正規順序(normal order)の場合,引数の評価はその引数の値が必要となるまで遅延(delay)される. ;; 今の場合,手続きtestの本体はif文であり,まず述語式{(= x 0)}の評価に入り,今xは0であるので,(= 0 0)となりこれは真であるので, ;; 代替部{y}を評価することなく,そのまま帰結部{0}を返す.よって無限ループには陥らない. ;; (参考) ;; この様に書くと,正規順序の方が優れているように見えますが,計算効率などを考え普通の解釈系は作用的順序です. ;; 正規順序の解釈系の実装については,4.2で詳しくやります. by Alyssa Exercise1.6 (define (new-if predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause))) (define (sqrt-iter guess x) (new-if (good-enough? guess x) guess (sqrt-iter (improve guess x) x))) ;; new-ifはあくまで手続きであるので,引数を全て評価してからnew-if本体に作用させる. ;; ゆえに,引数else-clause(ifでいう代替部)にあたる(sqrt-iter ..)の部分の評価でさらにその中のsqrt-iterを評価し,と無限ループに陥る. ;; (参考) ;; なぜ普通のifではこの様な無限ループに陥らないかというと,ifは手続きではなくあくまで特殊形式であり, ;; まず述語部を評価して,その真偽に応じて,帰結部か代替部を初めて評価するので,(good-enough? ..)の部分が真になった時点で,代替部の(sqrt-iter ..)は評価されないのです. ;; ですので例えば,(if (= 0 0) 1 (/ 1 0))なども(一応)エラーが出ずに通ります. by Alyssa Exercise1.7 (define (average x y) (/ (+ x y) 2)) (define (improve guess x) (average guess (/ x guess))) (define (sqrt-iter guess next-guess x) (if (good-enough? guess next-guess) next-guess (sqrt-iter next-guess (improve next-guess x) x))) (define (good-enough? guess next-guess) ( (abs (/ (- next-guess guess) next-guess)) 0.001)) (define (sqrt x) (sqrt-iter 1.0 (improve 1.0 x) x)) ;; 変更する前のsqrtでは,小さい値の場合誤差が酷く,大きい値の場合永久に結果が出ない場合があります. ;; この原因は,good-enough?が求めるべき値との絶対的な誤差で判断しているからです. ;; ですので,重要な変更点はgood-enough?です. ;; 推測値が十分に変化しなくなった相対的な誤差で判断させます. ;; こちらは有効数字的な考え方ですので,酷く結果がずれることも,永久に値が出ないこともありません. 実行例 ;; 改良前(本文中に出てくるsqrt) SC (sqrt .0002) 0.0333528160928043 ;; 誤差が酷い SC (sqrt 20000000000000000000000000000000000) ;; 停止しない ;; 改良後(上のソースのsqrt) SC (sqrt .0002) 0.0141421356237384 SC (sqrt 20000000000000000000000000000000000) 1.41421379705111e+17 ;; ともにちゃんとした値がでる by Alyssa Exercise1.8 (define (curt-iter guess x) (if (good-enough? guess x) guess (curt-iter (improve guess x) x))) (define (improve guess x) (/ (+ (/ x guess guess) (* 2 guess)) 3)) (define (good-enough? guess x) ( (abs (- (cube guess) x)) .001)) (define (cube x) (* x x x)) (define (curt x) (curt-iter 1.0 x) 実行例 SC (curt 1.0) 1.0 SC (curt 2.0) 1.25993349344998 SC (curt 8.0) 2.0000049116755 ;; ただし,これもEx1.7と同じ理由で,小さい値や大きい値には対応できません. by Alyssa Exercise1.9 (define (inc a) (+ a 1)) (define (dec a) (- a 1)) (define (+_1 a b) (if (= a 0) b (inc (+_1 (dec a) b)))) (define (+_2 a b) (if (= a 0) b (+_2 (dec a) (inc b)))) ;; (注 2つの+を区別するために問題文とは名前を変えています.) ;; 以下プロセス (+_1 4 5) (inc (+_1 (dec 4) 5)) (inc (+_1 3 5)) (inc (inc (+_1 (dec 3) 5))) (inc (inc (+_1 2 5))) (inc (inc (inc (+_1 (dec 2) 5)))) (inc (inc (inc (+_1 1 5)))) (inc (inc (inc (inc (+_1 (dec 1) 5))))) (inc (inc (inc (inc (+_1 0 5))))) (inc (inc (inc (inc 5)))) (inc (inc (inc 6))) (inc (inc 7)) (inc 8) 9 これは再帰的 (+_2 4 5) (+_2 (dec 4) (inc 5)) (+_2 3 6) (+_2 (dec 3) (inc 6)) (+_2 2 7) (+_2 (dec 2) (inc 7)) (+_2 1 8) (+_2 (dec 1) (inc 8)) (+_2 0 9) 9 これは反復的 by Alyssa Exercise1.10 (define (A x y) (cond ((= y 0) 0) ((= x 0) (* 2 y)) ((= y 1) 2) (else (A (- x 1) (A x (- y 1)))))) (define (f n) (A 0 n)) (define (g n) (A 1 n)) (define (h n) (A 2 n)) 実行例 SC (A 1 10) 1024 SC (A 2 4) 65536 SC (A 3 3) 65536 また,f(n)=2*n,f(0)=0,f(1)=2より, f(n) = 2n 同様に,g(n)=2*g(n-1),g(1)=2より, g(n) = 2^n (これはn=0の時も成り立つ) 最後に,h(n) = 2^h(n-1),h(1)=2より, h(n) = (n≠0) 2^(2^(2^...^(2^2))...)) (2がn個表れる) (n=0) 0 by Alyssa Exercise1.11 ;; 再帰 (define (f-r n) (if ( = n 3) n (+ (f-r (- n 1)) (* 2 (f-r (- n 2))) (* 3 (f-r (- n 3)))))) ;; 反復 (define (f-i n) (define (iter a b c count) (cond (( = n 2) n) ((= count n) a) (else (iter (+ a (* 2 b) (* 3 c)) a b (+ count 1))))) (iter 3 2 1 3)) 実行例 SC (f-r 2) 2 SC (f-r 15) 124905 SC (f-i 2) 2 SC (f-i 15) 124905 by Alyssa Exercise1.12 (define (pascal n k) (cond ((= k 0) 1) ((= k n) 1) (else (+ (pascal (- n 1) (- k 1)) (pascal (- n 1) k))))) ;; ただし上のn,kは,上からn(n =0)番目の段の左からk(k =0)個目の要素としています. 実行例 SC (pascal 5 2) 10 SC (pascal 10 8) 45 by Alyssa Exercise1.13 schemeとは直接関係ありませんし書くのも面倒なのでアイディアだけ. まず,言われた通り,帰納法なりなんなりでFib(n)=(φ^n - ψ^n)/√5を示し, ここでn =0において,0 ψ 1より,(ψ^n)/√5 1/√5 1/√4 = 0.5であるので, これらよりFib(n)は(φ^n)/√5にもっとも近い整数といえます. by Alyssa Exercise1.14 (amount , kinds-of-coins) (11 , 5) - ( -39 , 5) - 0 | (11 , 4) - ( -14 , 4) - 0 | (11 , 3) - ( 1 , 3) - ( -9 , 3) - 0 | | | ( 1 , 2) - ( -4 , 2) - 0 | | | ( 1 , 1) - ( 0 , 1 ) - 1 | | | ( 1 , 0) - 0 | (11 , 2) - ( 6 , 2) - ( 1 , 2 ) - ( -4 , 2) - 0 | | | | | ( 1 , 1 ) - ( 0 , 1 ) - 1 | | | | | ( 1 , 0 ) - 0 | | | ( 6 , 1) - ( 5 , 1 ) - ( 4 , 1 ) - ( 3 , 1) - ( 2 , 1) - ( 1 , 1) - ( 0 , 1) - 1 | | | | | | | | | | | | | ( 1 , 0) - 0 | | | | | | | | | | | ( 2 , 0) - 0 | | | | | | | | | ( 3 , 0) - 0 | | | | | | | ( 4 , 0 ) - 0 | | | | | ( 5 , 0 ) - 0 | | | ( 6 , 0) - 0 | (11 , 1) - (10 , 1) - ( 9 , 1 ) - ( 8 , 1 ) - ( 7 , 1) - ( 6 , 1) - ........ - ( 1 , 1) - ( 0 , 1) - 1 | | | | | | | | | | | | | ( 1 , 0) - 0 | | | | | ( 6 , 0) - 0 | | | | | | | | | ( 7 , 0) - 0 | | | | | | | ( 8 , 0) - 0 | | | | | ( 9 , 0 ) - 0 | | | (10 , 0) - 0 | (11 , 0) - 0 増加の程度 スペース Θ(n) , ステップ数 Θ(a^n) by iriya Exercise1.15 (define (cube x) (* x x x)) (define (p x) (- (* 3 x) (* 4 (cube x)))) (define (sine angle) (if (not ( (abs angle) 0.1)) angle (p (sine (/ angle 3.0))))) ;; (a) ;; angleの絶対値が0.1より大きい時にpは呼ばれるので, ;; angel 12.15 4.05 1.35 0.45 0.15 0.05となることから ;; pは5回呼び出される. ;; (b) ;; 手続きpは,xにたいしてステップもスペースももちろんθ(1)である. ;; よって手続きsineは,pを呼び出す数に比例してステップが増え,スペースも同様である. ;; 今,ある(0.1より大きい)angleについて,その3倍の3*angleの(sine (* 3 angle))を考えると, ;; これは(p (sine angle))を呼び出すので,(sine angle)に対して一つステップもスペースも増える. ;; つまり,sineのオーダーをf(n)と表すなら,f(3n) = f(n) + 1が成り立つのである. ;; これを満たすfは,log_{3}(n)である. ;; よって,sineはステップもスペースもθ(log_{3}(n))である. ;; (補足) ;; ようは,angleが1/3ずつになっていくのでθ(log_{3}(n))なのです. by Alyssa Exercise1.16 ;; http //ja.wikipedia.org/wiki/%E5%86%AA%E4%B9%97 ;; 効率的演算法 の最初の方法から着想 (define (square x) (* x x)) (define (even? n) (= (remainder n 2) 0)) (define (fast-expt-iter a b n) (cond ((= n 0) a) ((even? n) (fast-expt-iter a (square b) (/ n 2))) (else (fast-expt-iter (* a b) b (- n 1))))) (define (fast-expt b n) (fast-expt-iter 1 b n)) by kacchi Exercise1.17 (define (halve x) (/ x 2)) (define (double x) (* x 2)) (define (even? n) (= (remainder n 2) 0)) (define (x a b) (cond ((= b 0) 0) ((even? b) (double (x a (halve b)))) (else (+ a (x a (- b 1)))))) gosh (x 123 4567890987654321) 561850591481481483 gosh (* 123 4567890987654321) 561850591481481483 by kacchi Exercise1.18 Exercise1.16 と同じ形なので、そのままあてはめた。 (define (double x) (+ x x)) (define (x a b) (x-iter 0 a b)) (define (x-iter product a b) (cond ((= b 0) product) ((even? b) (x-iter product (double a) (/ b 2))) (else (x-iter (+ a product) a (- b 1))))) by kacchi Exercise1.19 (define (mfib-iter a b p q count) (cond ((= count 0) b) ((even? count) (mfib-iter a b (+ (* p p) (* q q)) (+ (* q q) (* 2 p q)) (/ count 2))) (else (mfib-iter (+ (* b q) (* a q) (* a p)) (+ (* b p) (* a q)) p q (- count 1))))) (define (mfib n) (mfib-iter 1 0 0 1 n)) by iwk